GNU/Linux >> Znalost Linux >  >> Linux

pytest běžící s jinou verzí pythonu

Sečteno a podtrženo:spustit

  • python -m pytest nebo
  • py.test-<version> pokud váš alternativní Python a pytest se instalují pomocí správce systémových balíčků nebo
  • pokud byl váš alternativní Python nainstalován s pyenv , přepněte pomocí pyenv na tuto verzi a ujistěte se, že máte pytest nainstalovaný pro něj. Pak stačí spustit pytest .
    • od pip spustitelný je také mezi přepínanými, musíte před instalací přepnout na alternativní Python pytest za to taky.

Jak vidím, /usr/bin/pytest (patří do python-pytest správce balíčků systému balíček) má shebang !#/usr/bin/python protože to odpovídá instalaci systémového pythonu.

pyenv , jako jeho README.md říká, nenahrazuje /usr/bin/python - protože by se opravdu neměl nahrazovat, aby nedošlo k porušení systémových balíčků.

Místo toho přidá svůj adresář do PATH a vloží tam spouštěč (nazývaný "shim"), což je to, co se vyvolá, když zadáte "python ". Jak jste pravděpodobně uhodli, tento hack je ignorován šebangem, jako je výše uvedený - jak by měl."

  • Spuštění python -m pytest udělá podle toho, co python který se sám spustí, použije balíček ze své instalace.
  • Případně pytest pro vaši další verzi Pythonu může obsahovat verzované spustitelné soubory na PATH s názvem py.test-<version> (např. py.test-3 nebo py.test-3.6 ) v závislosti na způsobu instalace.
    • Pokud je z balíčku správce balíčků systému pro nestandardní python – jako python36-pytest - to je prakticky zaručeno.
    • Zkontroloval jsem, že pokud nainstalujete verzi s pip , vytvoří pouze spustitelný soubor bez verze (ačkoli verzi s verzí si můžete vytvořit sami). Navíc, pokud nainstalujete stejný balíček pro jinou verzi Pythonu, ale se stejným --prefix , přepíše stávající spustitelný soubor!
  • pyenv Zdá se, že navrhovaný způsob je nainstalovat všechny python verze zájmu a balíčky pro ně pod ~/.pyenv/versions .
    • Toto neplatí pro systémový Python, ale výchozí /usr/local lze na to použít.
    • Jakmile přejdete na alternativní verzi Pythonu, tvrdí, že vytvoří shims pro všechny skripty (včetně pip !), které jsou aktuálně nainstalovány pro danou verzi , takže vyvolání těchto skriptů bez cesty by spustilo tyto shims.
      • Pokud tedy balíček (a tím i jeho skript) není nainstalován pro alternativní verzi, ale je nainstalován pro verzi systému, pokus o spuštění jeho spustitelného souboru by "spadl" na /usr/local s výsledkem, který nyní vidíte.

Jen jsem chtěl spustit "černo" pro Python 2.7, ale nainstaloval jsem ho do Pythonu 3.7.9 od pyenv. Se skriptem /usr/local/bin/black27 to fungovalo správně :

PYENV_VERSION=3.7.9 black -t py27 "[email protected]"

Nefungovalo to s:

pyenv shell 3.7.9
black -t py27 "[email protected]"

ani

pyenv shell 3.7.9
pyenv exec black -t py27 "[email protected]"

Našel jsem tento související dotaz. Pro ně to fungovalo s tímto:

python -m pytest tests/my_test.py

Doufám, že to funguje


Linux
  1. Spuštění skriptu s „. “ A se „zdrojem“?

  2. Možnosti Su – Spuštění příkazu jako jiný uživatel?

  3. Jak používat export s Pythonem na Linuxu

  1. Blokování aktualizací jádra pomocí Dpkg?

  2. Jak Dockerize Python aplikací s Miniconda

  3. Skript Nohup pro Python nefunguje, když běží na pozadí s &

  1. Propojení se starší verzí libstdc++

  2. Simulujte úhoz v Linuxu pomocí Pythonu

  3. shebang env preferovanou verzi pythonu