Fazit:laufen
python -m pytest, oderpy.test-<version>wenn Ihr alternatives Python undpytestmit dem Systempaketmanager installiert werden, oder- wenn Ihr alternatives Python mit
pyenvinstalliert wurde , umschalten mitpyenvzu dieser Version und Stellen Sie sicher, dass Siepytesthaben dafür installiert. Dann können Sie einfachpytestausführen .- seit
pipausführbare Datei ebenfalls umgestellt wird, müssen Sie vor der Installation auf die Alternative Python umstellenpytestauch dafür.
- seit
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 pytestmacht je nachpythondas sich selbst startet, verwenden Sie das Paket aus seiner Installation. - Alternativ
pytestfür Ihre andere Python-Version kann versionierte ausführbare Dateien aufPATHenthalten mit dem Namenpy.test-<version>(z. B.py.test-3oderpy.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
pipinstallieren , 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--prefixinstallieren , wird die ausführbare Datei der vorhandenen überschrieben!
- Wenn es aus dem Paket eines Systempaketmanagers für Nicht-Standard-Python stammt - wie
pyenvDer vorgeschlagene Weg scheint zu sein, allepythonzu 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/localkann 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.
- 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
- Dies gilt nicht für Python des Systems, sondern für den Standard
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