GNU/Linux >> Linux Esercitazione >  >> Linux

pytest in esecuzione con un'altra versione di python

Conclusione:corri

  • python -m pytest o
  • py.test-<version> se il tuo Python alternativo e pytest sono installati con il gestore di pacchetti di sistema, o
  • se il tuo Python alternativo è stato installato con pyenv , cambia con pyenv a quella versione e assicurati di avere pytest installato per esso. Quindi puoi semplicemente eseguire pytest .
    • dal pip anche l'eseguibile è tra quelli che vengono cambiati, è necessario passare all'alternativa Python prima dell'installazione pytest anche per questo.

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à qualsiasi python che si avvia usa il pacchetto dalla sua installazione.
  • In alternativa, pytest per l'altra tua versione di Python potrebbe includere eseguibili con versione su PATH chiamato py.test-<version> (ad es. py.test-3 o py.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!
  • pyenv Il modo suggerito da sembra essere quello di installare tutti i python 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.

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]"

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


Linux
  1. Esecuzione dello script con ". ” E con “fonte”?

  2. Opzioni Su - Esecuzione del comando come un altro utente?

  3. Bloccare gli aggiornamenti del kernel con Dpkg?

  4. Come Dockerizzare le Applicazioni Python con Miniconda

  5. Collegamento con una versione precedente di libstdc++

Come controllare la versione di Python in Linux, Mac e Windows

Come controllare la versione di Python

Come eseguire un comando Shell con Python

Domotica:Running Home Assistant con Podman

Come controllare la versione del sistema operativo con la riga di comando di Linux

Come installare Python 2.7 su CentOS 7.1 o 6.7 con Anaconda