Bagaimana cara menambahkan jalur ke PYTHONPATH di virtualenv


97

Saya mencoba untuk menambahkan jalur ke variabel lingkungan PYTHONPATH, yang hanya akan terlihat dari lingkungan virtualenv tertentu.

Saya mencoba di SET PYTHONPATH=...bawah prompt perintah virtualenv, tetapi itu menetapkan variabel untuk seluruh lingkungan.

Bagaimana cara mencapai itu?

Jawaban:


155

Anda biasanya dapat menghindari melakukan apa pun dengan PYTHONPATH dengan menggunakan .pthfile . Letakkan saja file dengan ekstensi .pth (nama dasar apa pun berfungsi) di folder paket situs virtualenv Anda, misalnya lib\python2.7\site-packages, dengan jalur absolut ke direktori yang berisi paket Anda sebagai satu-satunya isinya.


Sayangnya ini tidak berfungsi sebagai penimpaan. Itu menambahkan jalur, jadi jika Anda mengembangkannya tidak berhasil.
Erik Aronesty

Juga, jika Anda mengetahui jalur absolut, apa gunanya variabel?
Jamie Marshall

Anda juga dapat menavigasi ke folder paket situs lingkungan virtual Anda dan membuat tautan simbolis ke file .pth seperti ini: ln -s path / to / somfile.pth. Saya menemukan ini berguna ketika saya membutuhkan direktori yang sama agar dapat diakses di beberapa lingkungan virtual
Data-phile

91

Jika Anda menggunakan virtualenv, Anda mungkin juga harus menggunakan virtualenvwrapper , dalam hal ini Anda dapat menggunakan perintah add2virtualenv untuk menambahkan jalur ke jalur Python untuk virtualenv saat ini:

add2virtualenv directory1 directory2 …


3
Bagaimana jika menghapus dari virtualenv?
silverdagger

1
Saya ingin menambahkan komentar ramah bahwa pada host bersama dan situasi serupa pembungkus venv tidak diinginkan. Dalam kasus seperti itu, satu venv berlaku dan semua yang diperlukan membuat pemasangan tambahan tidak diinginkan. Secara lokal hal-hal berbeda, tetapi di server / image KISS sangat penting.
Marc

2
Saya tidak yakin bagaimana perintah bekerja saat ini ditulis, tetapi add2virtualenvtidak mengubah $ PYTHONPATH, melainkan memodifikasi sys.path.
ForeverWintr

1
@ajostergaard: Maaf, saya harus menyediakan sumbernya. Jika Anda melihat kode sumbernya add2virtualenv, Anda dapat melihatnya memodifikasi sys.path. Saya setuju bahwa dokumen membuatnya terdengar seperti itu memodifikasi PYTHONPATHvariabel lingkungan, tetapi tampaknya tidak benar. bitbucket.org/virtualenvwrapper/virtualenvwrapper/src/...
ForeverWintr

1
@ForeverWintr Saya berdiri dikoreksi - file .pth digunakan untuk mengatur sys.path. docs.python.org/2/library/site.html Confused.com!
ostergaard

5

Anda juga dapat mencoba meletakkan symlink ke salah satu virtualenv Anda.

misalnya. 1) aktifkan virtualenv Anda 2) jalankan python 3) impor sys dan periksa sys.path 4) Anda akan menemukan jalur pencarian python di sana. Pilih salah satu dari mereka (mis. Paket-situs) 5) pergi ke sana dan buat symlink ke paket Anda seperti: ln -s path-to-your-package name-with-which-you're-be-importing

Dengan begitu Anda harus dapat mengimpornya bahkan tanpa mengaktifkan virtualenv Anda. Cukup coba: path-to-your-virtualenv-folder / bin / python dan impor paket Anda.


Saya kira ini downvoted karena menggunakan symlink daripada file .pth. Itu berhasil untuk saya, jadi, siapa pun.
Gareth Davidson

3

Jika Anda menggunakan virtualenvwrapper,

$ cd to the parent folder
$ add2virtualenv  folder_to_add

konsol akan ditampilkan

Warning: Converting "folder_to_add" to "/absoutle/path/to/folder_to_add"

Itu dia, dan kamu harus pergi


1
import sys
import os

print(str(sys.path))

dir_path = os.path.dirname(os.path.realpath(__file__))
print("current working dir: %s" % dir_path)

sys.path.insert(0, dir_path)

Saya sangat menyarankan Anda menggunakan virtualenv dan virtualenvwrapper untuk menghindari jalan yang berantakan.


jika Anda ingin ini bekerja dengan versi python apa pun, cukup gunakan format string gaya lama normal daripada f-string mewah f "... {dir_path}"
Guillaume S

Terima kasih atas komentarnya. Saya merevisi untuk digunakan. cara lama tidak praktis dan istimewa dan tidak ada yang mewah tentang sistem templating sederhana
Rubber Duck

Semuanya relatif :)
Guillaume S
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.