Virtualenv'de PYTHONPATH'a nasıl yol eklerim


99

PYTHONPATH ortam değişkenine, yalnızca belirli bir virtualenv ortamından görülebilecek bir yol eklemeye çalışıyorum.

SET PYTHONPATH=...Bir virtualenv komut istemi altında denedim , ancak bu tüm ortam için değişkeni ayarlıyor.

Bunu nasıl başarırım?

Yanıtlar:


158

Dosyaları kullanarak.pth PYTHONPATH ile herhangi bir şey yapmak zorunda kalmazsınız . Virtualenv'inizin site paketleri klasörüne .pth uzantılı bir dosya (örneğin lib\python2.7\site-packages, paketinizin tek içeriği olarak bulunduğu dizinin mutlak yolu ile) koyun.


Maalesef bu bir geçersiz kılma olarak çalışmaz. Yolu ekler, yani geliştiriyorsanız işe yaramaz.
Erik Aronesty

Ayrıca, mutlak yolu biliyorsanız, bir değişkenin amacı nedir?
Jamie Marshall

ayrıca sanal ortamınızın site paketleri klasörüne gidebilir ve .pth dosyasına şu şekilde sembolik bir bağlantı oluşturabilirsiniz: ln -s yol / to / somfile.pth. Aynı dizine birden çok sanal ortamda erişilebilir olması gerektiğinde bunu yararlı buldum
Data-phile

91

Eğer kullanıyorsanız virtualenv, muhtemelen virtualenvwrapper kullanıyor olmalısınız , bu durumda add2virtualenv komutunu mevcut virtualenv için Python yoluna yollar eklemek için kullanabilirsiniz :

add2virtualenv directory1 directory2 …


3
Virtualenv'den kaldırmaya ne dersiniz?
silverdagger

1
Paylaşılan ana bilgisayarlar ve benzeri durumlarda venv sarmalayıcısının istenmediğine dair samimi bir yorum eklemek istiyorum. Bu gibi durumlarda bir venv etkindir ve ek kurulum yapmak için gereken her şey istenmez. Yerel olarak işler farklıdır, ancak sunucu / görüntüde KISS gerçekten önemlidir.
Marc

2
Bu yazıldığında komutun nasıl çalıştığından emin değilim, ancak add2virtualenv$ PYTHONPATH'ı değiştirmiyor, bunun yerine sys.path'i değiştiriyor.
ForeverWintr

1
@ajostergaard: Üzgünüm, bir kaynak sağlamalıydım. Kaynak koduna bakarsanız, add2virtualenvsys.path'i değiştirdiğini görebilirsiniz. Dokümanların, PYTHONPATHortam değişkenini değiştiriyormuş gibi ses çıkardığını kabul ediyorum , ancak bu yanlış görünüyor. bitbucket.org/virtualenvwrapper/virtualenvwrapper/src/...
ForeverWintr

1
@ForeverWintr Düzeltilmiş durumda - .pth dosyaları sys.path'i ayarlamak için kullanılır. docs.python.org/2/library/site.html Confused.com!
ostergaard

5

Ayrıca sanal ortamlarınızdan birine sembolik bağ koymayı da deneyebilirsiniz.

Örneğin. 1) virtualenv'inizi etkinleştirin 2) python çalıştırın 3) sys içe aktarın ve sys.path'i kontrol edin 4) orada python arama yolunu bulacaksınız. Bunlardan birini seçin (ör. Site paketleri) 5) oraya gidin ve paketinize sembolik bağlantı oluşturun, örneğin: ln -s paketinizin adı-ile-hangi-içeri-aktaracaksınız

Bu şekilde, virtualenv'inizi etkinleştirmeden bile içeri aktarabilmelisiniz. Basitçe deneyin: sanalenv klasörünüzün-yolu / bin / python ve paketinizi içe aktarın.


Sanırım bu, .pth dosyaları yerine sembolik bağları kullanmak için reddedildi. Yine de benim için çalıştı, yani, her ne olursa olsun.
Gareth Davidson

3

Virtualenvwrapper kullanıyorsanız,

$ cd to the parent folder
$ add2virtualenv  folder_to_add

konsol görüntülenecek

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

İşte bu ve gitmek için iyi olmalısın


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)

Yolun dağınıklığını önlemek için virtualenv ve virtualenvwrapper kullanmanızı şiddetle tavsiye ederim.


bunun herhangi bir python sürümüyle çalışmasını istiyorsanız, süslü f-string f "... {dir_path}" yerine normal bir eski stil dize biçimi kullanın
Guillaume Ç

Yorum için teşekkürler. Kullanım için revize ettim. eski yöntemler hantal ve kendine özgüdür ve basit bir şablonlama sistemiyle ilgili hiçbir fantezi yoktur
Rubber Duck

Her şey görecelidir :)
Guillaume S
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.