Conclusione:corri
python -m pytestopy.test-<version>se il tuo Python alternativo epytestsono installati con il gestore di pacchetti di sistema, o- se il tuo Python alternativo è stato installato con
pyenv, cambia conpyenva quella versione e assicurati di averepytestinstallato per esso. Quindi puoi semplicemente eseguirepytest.- dal
pipanche l'eseguibile è tra quelli che vengono cambiati, è necessario passare all'alternativa Python prima dell'installazionepytestanche 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 pytestrenderà qualsiasipythonche si avvia usa il pacchetto dalla sua installazione. - In alternativa,
pytestper l'altra tua versione di Python potrebbe includere eseguibili con versione suPATHchiamatopy.test-<version>(ad es.py.test-3opy.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
pyenvIl modo suggerito da sembra essere quello di installare tutti ipythonversioni di interesse e pacchetti per loro sotto~/.pyenv/versions.- Questo non è applicabile per Python del sistema ma per il
/usr/localpredefinito 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/localcon 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