En resumen:corre
python -m pytest
, opy.test-<version>
si su Python alternativo ypytest
se instalan con el administrador de paquetes del sistema, o- si su Python alternativo se ha instalado con
pyenv
, cambia conpyenv
a esa versión y asegúrate de tenerpytest
instalado para ello. Entonces puedes simplemente ejecutarpytest
.- desde el
pip
El ejecutable también se encuentra entre los que se están cambiando, debe cambiar al Python alternativo antes de instalarpytest
para eso también.
- desde el
Como puedo ver, /usr/bin/pytest
(que pertenece al administrador de paquetes del sistema python-pytest
paquete) tiene un shebang !#/usr/bin/python
ya que corresponde a la instalación del sistema python.
pyenv
, como su README.md
dice, no reemplaza /usr/bin/python
- porque, de hecho, no debe reemplazarse para evitar romper los paquetes del sistema.
En su lugar, agrega su directorio a PATH
e inserta un lanzador allí (llamado "shim") que es lo que se invoca cuando escribe "python
". Como probablemente hayas adivinado, este truco es ignorado por un shebang como el anterior, como debería ser.
- Ejecutando
python -m pytest
hará lo que seapython
que se lanza solo usa el paquete de su instalación. - Alternativamente,
pytest
para su otra versión de Python puede incluir ejecutables versionados en elPATH
llamadopy.test-<version>
(por ejemplo,py.test-3
opy.test-3.6
) dependiendo de la forma en que lo instaló.- Si es del paquete de un administrador de paquetes del sistema para python no estándar, como
python36-pytest
- esto está prácticamente garantizado. - Comprobé que si instala una versión con
pip
, solo crea un ejecutable no versionado (aunque usted mismo puede crear uno versionado). Además, si instala el mismo paquete para una versión diferente de Python pero con el mismo--prefix
, ¡sobrescribirá el ejecutable existente!
- Si es del paquete de un administrador de paquetes del sistema para python no estándar, como
pyenv
La forma sugerida parece ser instalar todos lospython
versiones de interés y paquetes para ellos bajo~/.pyenv/versions
.- Esto no es aplicable para Python del sistema, pero el predeterminado
/usr/local
se puede utilizar para ello. - Una vez que cambia a una versión alternativa de Python, pretende crear correcciones de compatibilidad para todos guiones (incluyendo
pip
!) que están instalados actualmente para esa versión , por lo que invocar esos scripts sin una ruta ejecutaría esos shims.- Entonces, si un paquete (y por lo tanto su secuencia de comandos) no está instalado para la versión alternativa pero está instalado para la versión del sistema, intentar ejecutar su ejecutable "fallaría" en
/usr/local
solo con el resultado que estás viendo ahora.
- Entonces, si un paquete (y por lo tanto su secuencia de comandos) no está instalado para la versión alternativa pero está instalado para la versión del sistema, intentar ejecutar su ejecutable "fallaría" en
- Esto no es aplicable para Python del sistema, pero el predeterminado
Solo quería ejecutar "negro" para Python 2.7, pero lo instalé en Python 3.7.9 de pyenv. Funcionó correctamente con el script /usr/local/bin/black27
:
PYENV_VERSION=3.7.9 black -t py27 "[email protected]"
No funcionó con:
pyenv shell 3.7.9
black -t py27 "[email protected]"
ni
pyenv shell 3.7.9
pyenv exec black -t py27 "[email protected]"
Encontré esta pregunta relacionada. Para ellos funcionó con esto:
python -m pytest tests/my_test.py
Espero que funcione