Conclusione:corri
python -m pytest
opy.test-<version>
se il tuo Python alternativo epytest
sono installati con il gestore di pacchetti di sistema, o- se il tuo Python alternativo è stato installato con
pyenv
, cambia conpyenv
a quella versione e assicurati di averepytest
installato per esso. Quindi puoi semplicemente eseguirepytest
.- dal
pip
anche l'eseguibile è tra quelli che vengono cambiati, è necessario passare all'alternativa Python prima dell'installazionepytest
anche per questo.
- dal
Come posso vedere, /usr/bin/pytest
(che appartiene al python-pytest
del gestore di pacchetti di sistema pacchetto) ha un shebang !#/usr/bin/python
poiché corrisponde all'installazione del sistema python.
pyenv
, come README.md
dice, non sostituisce /usr/bin/python
- perché in effetti non dovrebbe essere sostituito per evitare di danneggiare i pacchetti di sistema.
Invece, aggiunge la sua directory a PATH
e vi inserisce un launcher (chiamato "shim") che è ciò che viene richiamato quando digiti "python
". Come probabilmente avrai intuito, questo hack viene ignorato da una barzelletta come quella sopra, come dovrebbe.
- In esecuzione
python -m pytest
renderà qualsiasipython
che si avvia usa il pacchetto dalla sua installazione. - In alternativa,
pytest
per l'altra tua versione di Python potrebbe includere eseguibili con versione suPATH
chiamatopy.test-<version>
(ad es.py.test-3
opy.test-3.6
) a seconda del modo in cui l'hai installato.- Se proviene dal pacchetto di un gestore di pacchetti di sistema per Python non standard, come
python36-pytest
- questo è virtualmente garantito. - Ho verificato che se installi una versione con
pip
, crea solo un eseguibile senza versione (sebbene tu possa crearne uno con versione tu stesso). Inoltre, se installi lo stesso pacchetto per una versione diversa di Python ma con lo stesso--prefix
, sovrascriverà l'eseguibile esistente!
- Se proviene dal pacchetto di un gestore di pacchetti di sistema per Python non standard, come
pyenv
Il modo suggerito da sembra essere quello di installare tutti ipython
versioni di interesse e pacchetti per loro sotto~/.pyenv/versions
.- Questo non è applicabile per Python del sistema ma per il
/usr/local
predefinito può essere utilizzato per questo. - Una volta che si passa a una versione alternativa di Python, afferma di creare shim per tutti script (incluso
pip
!) attualmente installati per quella versione , quindi invocare quegli script senza un percorso eseguirà quegli shim.- Quindi, se un pacchetto (e quindi il suo script) non è installato per la versione alternativa ma installato per la versione di sistema, il tentativo di eseguire il suo eseguibile "passerebbe" a
/usr/local
con solo il risultato che stai vedendo ora.
- Quindi, se un pacchetto (e quindi il suo script) non è installato per la versione alternativa ma installato per la versione di sistema, il tentativo di eseguire il suo eseguibile "passerebbe" a
- Questo non è applicabile per Python del sistema ma per il
Volevo solo eseguire "black" per Python 2.7, ma l'ho installato in Python 3.7.9 di pyenv. Ha funzionato correttamente con lo script /usr/local/bin/black27
:
PYENV_VERSION=3.7.9 black -t py27 "[email protected]"
Non ha funzionato con:
pyenv shell 3.7.9
black -t py27 "[email protected]"
né
pyenv shell 3.7.9
pyenv exec black -t py27 "[email protected]"
Ho trovato questa domanda correlata. Per loro ha funzionato con questo:
python -m pytest tests/my_test.py
Spero che funzioni