Fazit:laufen
python -m pytest
, oderpy.test-<version>
wenn Ihr alternatives Python undpytest
mit dem Systempaketmanager installiert werden, oder- wenn Ihr alternatives Python mit
pyenv
installiert wurde , umschalten mitpyenv
zu dieser Version und Stellen Sie sicher, dass Siepytest
haben dafür installiert. Dann können Sie einfachpytest
ausführen .- seit
pip
ausführbare Datei ebenfalls umgestellt wird, müssen Sie vor der Installation auf die Alternative Python umstellenpytest
auch 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 pytest
macht je nachpython
das sich selbst startet, verwenden Sie das Paket aus seiner Installation. - Alternativ
pytest
für Ihre andere Python-Version kann versionierte ausführbare Dateien aufPATH
enthalten mit dem Namenpy.test-<version>
(z. B.py.test-3
oderpy.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!
- Wenn es aus dem Paket eines Systempaketmanagers für Nicht-Standard-Python stammt - wie
pyenv
Der vorgeschlagene Weg scheint zu sein, allepython
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.
- 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