GNU/Linux >> Tutoriales Linux >  >> Linux

pytest ejecutándose con otra versión de python

En resumen:corre

  • python -m pytest , o
  • py.test-<version> si su Python alternativo y pytest se instalan con el administrador de paquetes del sistema, o
  • si su Python alternativo se ha instalado con pyenv , cambia con pyenv a esa versión y asegúrate de tener pytest instalado para ello. Entonces puedes simplemente ejecutar pytest .
    • desde el pip El ejecutable también se encuentra entre los que se están cambiando, debe cambiar al Python alternativo antes de instalar pytest para eso también.

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 sea python 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 el PATH llamado py.test-<version> (por ejemplo, py.test-3 o py.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!
  • pyenv La forma sugerida parece ser instalar todos los python 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.

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


Linux
  1. Su Options – ¿Ejecutar comando como otro usuario?

  2. ¿Bloqueando las actualizaciones del kernel con Dpkg?

  3. Cómo usar la exportación con Python en Linux

  4. Simular pulsaciones de teclas en Linux con Python

  5. El script Nohup para Python no funciona cuando se ejecuta en segundo plano con &

Cómo comprobar la versión de Python en Linux, Mac y Windows

Cómo comprobar la versión de Python

Cómo ejecutar un comando de Shell con Python

Domótica:Ejecución de Home Assistant con Podman

Cómo comprobar la versión del sistema operativo con la línea de comandos de Linux

Cómo instalar Python 2.7 en CentOS 7.1 o 6.7 con Anaconda