PYTHONPATH ortam değişkeni… daha sonra her alt dizini nasıl yapabilirim?


9

Şu anda bunu yapıyorum:

PYTHONPATH=/home/$USER:/home/$USER/respository:/home/$USER/repository/python-stuff

PYTHONPATH her şeyi alt dizini içerecek şekilde nasıl yapabilirim?

PYTHONPATH = /home/$USER/....and-all-subdirectories

Yanıtlar:


14

PYTHONPATH böyle çalışmaz; PYTHONPATH arama yolunu PATH kabuğundan farklı şekilde ele alır. Diyelim ki bunu yapıyorum:

$ mkdir /home/jsmith/python
$ cd /home/jsmith/python
$ touch a.py b.py

Bu, Python'da çalışacaktır ( sys.pathgeçerli dizini içerecektir):

$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6

Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51)
>>> import a, b   # Works
>>> quit()

Ancak, alt dizinler dizinde bulunduğunda paketler olarak ele alınır __init__.pyve aksi takdirde PYTHONPATH tarafından yoksayılır :

$ mkdir /home/jsmith/python/pkg
$ cd /home/jsmith/python/pkg
$ touch __init__.py c.py d.py
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6

Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51)
>>> import a, b   # Works
>>> import c
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named c

Bu alt dizindeki bir şeye ulaşmak için, bu işe yarayacaktır:

>>> from pkg import c   # Works
>>> import pkg.c        # Works

PYTHONPATH'nizdeki her alt dizinin eklendiği bir çözümü almak için, her klasörü PYTHONPATH'a veya sys.pathprogramlı olarak açıkça eklemeniz gerekir . Bu davranış kasıtlıdır ve kabuk PATH gibi bir şey yapmaz . Tercümanın bu konudaki paketlere verdiği destek göz önüne alındığında, kesinlikle peşinde olduğunuz şeyi başarmanın daha iyi bir yolu var mı?


3
Dostum, her sitenin ayrıcalıklarını göndermeden önce diğer hesaplarını kontrol etmesini diliyorum. Özellikle tek URL limiti gibi şeylerle rep ile baştan berbat ... (Senin için daha fazla referansım vardı, OP)
Jed Smith

1

Ortam PATH değişkenleri böyle çalışmaz - ona en üst düzey dizini verirsiniz ve gerekirse dizin ağacını geri almak uygulamaya bağlıdır.


Yani, /home/$USER/myfile.py altında bir python dosyam varsa Bunu içe aktarabilir miyim?
Alex

Tabii, neden yapamadın?
EEAA

1

Tabii ki kabuğu kullanarak PYTHONPATH değişkeninize bir dizinin alt dizinlerini eklemek mümkündür. Şu anda .bashrc dosyamda aşağıdakine benzer bir şey kullanıyorum:

export PYTHONPATH="$(find $HOME/ -maxdepth 2 -type d | sed '/\/\./d' | tr '\n' ':' | sed 's/:$//')"

Bu, kullanıcı klasörünüzün tüm alt dizinlerini ağaçta 2 derinliğe kadar içerecektir. Find komutu dizinleri ('-type d') bulur ve aşağıdaki sed ve tr komutları çıktıyı normal PATH değişkenleri biçiminde biçimlendirir.

'-Maxdepth 2' 'yi terk etmek, ana klasörünüzün tüm alt dizinlerini içerecektir, ki bu muhtemelen aranacak çok şeydir. Belki de bu sadece $ HOME / repository / python-stuff dizininizde yapılmalıdır.

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.