GNU/Linux >> Belajar Linux >  >> Linux

pytest berjalan dengan versi lain dari python

Intinya:lari

  • python -m pytest , atau
  • py.test-<version> jika Python dan pytest alternatif Anda diinstal dengan pengelola paket sistem, atau
  • jika Python alternatif Anda telah diinstal dengan pyenv , alihkan dengan pyenv ke versi itu dan pastikan Anda memiliki pytest diinstal untuk itu. Kemudian Anda bisa menjalankan pytest .
    • sejak pip dapat dieksekusi juga di antara yang dialihkan, Anda perlu beralih ke Python alternatif sebelum menginstal pytest untuk itu juga.

Seperti yang saya lihat, /usr/bin/pytest (milik python-pytest pengelola paket sistem paket) memiliki shebang !#/usr/bin/python karena ini sesuai dengan instalasi sistem python.

pyenv , sebagai README.md mengatakan, tidak menggantikan /usr/bin/python - karena memang tidak boleh diganti untuk menghindari kerusakan paket sistem.

Sebagai gantinya, ia menambahkan direktorinya ke PATH dan menyisipkan peluncur di sana (disebut "shim") yang dipanggil saat Anda mengetik "python ". Seperti yang mungkin Anda duga, peretasan ini diabaikan oleh shebang seperti di atas - sebagaimana mestinya.

  • Menjalankan python -m pytest akan membuat python mana saja yang diluncurkan sendiri menggunakan paket dari instalasinya.
  • Atau, pytest untuk versi Python Anda yang lain mungkin menyertakan executable berversi pada PATH bernama py.test-<version> (misalnya py.test-3 atau py.test-3.6 ) tergantung pada cara Anda menginstalnya.
    • Jika itu dari paket pengelola paket sistem untuk python tidak standar - seperti python36-pytest - ini hampir dijamin.
    • Saya memeriksa apakah Anda memasang versi dengan pip , itu hanya membuat executable tidak berversi (meskipun Anda dapat membuat versi sendiri). Selain itu, jika Anda menginstal paket yang sama untuk versi Python yang berbeda tetapi dengan --prefix yang sama , itu akan menimpa executable yang sudah ada!
  • pyenv cara yang disarankan tampaknya adalah menginstal semua python versi minat dan paket untuk mereka di bawah ~/.pyenv/versions .
    • Ini tidak berlaku untuk Python sistem tetapi /usr/local default dapat digunakan untuk itu.
    • Setelah Anda beralih ke versi Python alternatif, ia mengklaim membuat shim untuk semua skrip (termasuk pip !) yang saat ini diinstal untuk versi tersebut , jadi menjalankan skrip tersebut tanpa jalur akan menjalankan shims tersebut.
      • Jadi, jika sebuah paket (dan skripnya) tidak diinstal untuk versi alternatif tetapi diinstal untuk versi sistem, mencoba menjalankan executable-nya akan "gagal" ke /usr/local hanya dengan hasil yang Anda lihat sekarang.

Saya hanya ingin menjalankan "hitam" untuk Python 2.7, tetapi saya telah menginstalnya di Python 3.7.9 pyenv. Itu bekerja dengan benar dengan skrip /usr/local/bin/black27 :

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

Itu tidak bekerja dengan:

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

maupun

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

Saya menemukan pertanyaan terkait ini. Bagi mereka itu berhasil dengan ini:

python -m pytest tests/my_test.py

Saya harap ini berhasil


Linux
  1. Cara menggunakan ekspor dengan Python di Linux

  2. Tautkan dengan libstdc++ versi lama

  3. Simulasikan keystroke di Linux dengan Python

  1. Menjalankan Script Dengan “. ” Dan Dengan “sumber”?

  2. Skrip Nohup untuk Python tidak berfungsi saat berjalan di latar belakang dengan &

  3. Menjalankan skrip dari direktori lain

  1. Memblokir Pembaruan Kernel Dengan Dpkg?

  2. Cara Dockerize Aplikasi Python Dengan Miniconda

  3. shebang env lebih suka versi python