GNU/Linux >> LINUX-Kenntnisse >  >> Linux

pytest läuft mit einer anderen Version von Python

Fazit:laufen

  • python -m pytest , oder
  • py.test-<version> wenn Ihr alternatives Python und pytest mit dem Systempaketmanager installiert werden, oder
  • wenn Ihr alternatives Python mit pyenv installiert wurde , umschalten mit pyenv zu dieser Version und Stellen Sie sicher, dass Sie pytest haben dafür installiert. Dann können Sie einfach pytest ausführen .
    • seit pip ausführbare Datei ebenfalls umgestellt wird, müssen Sie vor der Installation auf die Alternative Python umstellen pytest auch dafür.

Wie ich sehe, /usr/bin/pytest (das gehört zum python-pytest des Systempaketmanagers Paket) hat einen Shebang !#/usr/bin/python da es der System-Python-Installation entspricht.

pyenv , als README.md sagt, ersetzt nicht /usr/bin/python - weil es in der Tat nicht ersetzt werden sollte, um Systempakete nicht zu beschädigen.

Stattdessen fügt es sein Verzeichnis zu PATH hinzu und fügt dort einen Launcher (namens „shim“) ein, der aufgerufen wird, wenn Sie „python eingeben ". Wie Sie wahrscheinlich schon erraten haben, wird dieser Hack von einem Kram wie dem obigen ignoriert - wie es sein sollte.

  • Läuft python -m pytest macht je nach python das sich selbst startet, verwenden Sie das Paket aus seiner Installation.
  • Alternativ pytest für Ihre andere Python-Version kann versionierte ausführbare Dateien auf PATH enthalten mit dem Namen py.test-<version> (z. B. py.test-3 oder py.test-3.6 ) je nachdem, wie Sie es installiert haben.
    • Wenn es aus dem Paket eines Systempaketmanagers für Nicht-Standard-Python stammt - wie python36-pytest - das ist so gut wie garantiert.
    • Ich habe das überprüft, wenn Sie eine Version mit pip installieren , erstellt es nur eine nicht versionierte ausführbare Datei (obwohl Sie selbst eine versionierte erstellen können). Außerdem, wenn Sie dasselbe Paket für eine andere Python-Version, aber mit demselben --prefix installieren , wird die ausführbare Datei der vorhandenen überschrieben!
  • pyenv Der vorgeschlagene Weg scheint zu sein, alle python zu installieren interessanten Versionen und Pakete für sie unter ~/.pyenv/versions .
    • Dies gilt nicht für Python des Systems, sondern für den Standard /usr/local kann dafür verwendet werden.
    • Sobald Sie zu einer alternativen Python-Version wechseln, behauptet sie, Shims für alle zu erstellen Skripte (einschließlich pip !), die derzeit für diese Version installiert sind , also würde das Aufrufen dieser Skripte ohne einen Pfad diese Shims ausführen.
      • Wenn also ein Paket (und damit sein Skript) nicht für die alternative Version, sondern für die Systemversion installiert ist, würde der Versuch, seine ausführbare Datei auszuführen, zu /usr/local "durchfallen". mit genau dem Ergebnis, das Sie jetzt sehen.

Ich wollte nur "schwarz" für Python 2.7 ausführen, habe es aber in Python 3.7.9 von pyenv installiert. Es funktionierte korrekt mit dem Skript /usr/local/bin/black27 :

PYENV_VERSION=3.7.9 black -t py27 "[email protected]"

Es hat nicht funktioniert mit:

pyenv shell 3.7.9
black -t py27 "[email protected]"

noch

pyenv shell 3.7.9
pyenv exec black -t py27 "[email protected]"

Ich habe diese verwandte Frage gefunden. Bei denen hat es damit funktioniert:

python -m pytest tests/my_test.py

Ich hoffe es funktioniert


Linux
  1. Laufendes Skript mit „. “ Und mit „Quelle“?

  2. So Dockerisieren Sie Python-Anwendungen mit Miniconda

  3. Link mit einer älteren Version von libstdc++

  4. Tastenanschlag in Linux mit Python simulieren

  5. Ausführen eines Python-Skripts von PHP

So überprüfen Sie die Python-Version in Linux, Mac und Windows

So überprüfen Sie die Python-Version

So führen Sie einen Shell-Befehl mit Python aus

Heimautomatisierung:Home Assistant mit Podman ausführen

So überprüfen Sie die Betriebssystemversion mit der Linux-Befehlszeile

So installieren Sie Python 2.7 unter CentOS 7.1 oder 6.7 mit Anaconda