जवाबों:
यही नहीं PYTHONPATH कैसे काम करता है; PYTHONPATH अपने खोज पथ को PATH से अलग तरीके से मानता है। मान लें कि मैं ऐसा करता हूं:
$ mkdir /home/jsmith/python
$ cd /home/jsmith/python
$ touch a.py b.py
यह काम करेगा, पायथन में ( sys.path
वर्तमान निर्देशिका को शामिल करेगा):
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
>>> import a, b # Works
>>> quit()
हालाँकि, उपनिर्देशिका को संकुल के रूप में माना जाता है जब __init__.py
निर्देशिका में मौजूद होता है, और अन्यथा PYTHONPATH द्वारा अनदेखा किया जाता है:
$ 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
उस उपनिर्देशिका में कुछ पाने के लिए, यह काम करेगा:
>>> from pkg import c # Works
>>> import pkg.c # Works
एक समाधान को रोल करने के लिए जहां आपके PYTHONPATH में प्रत्येक उपनिर्देशिका को जोड़ा जाता है, आपको PYTHONPATH या sys.path
प्रोग्रामेटिक रूप से प्रत्येक फ़ोल्डर को स्पष्ट रूप से जोड़ना होगा । यह व्यवहार जानबूझकर किया गया है, और शेल PATH की तरह कुछ भी व्यवहार नहीं करता है । इस संबंध में पैकेज के लिए दुभाषिया के समर्थन को देखते हुए, निश्चित रूप से एक बेहतर तरीका है कि आप क्या कर रहे हैं?
यह नहीं है कि पर्यावरण पैठ चर कैसे काम करता है - आप इसे शीर्ष-स्तरीय निर्देशिका देते हैं और अगर यह जरूरत है तो निर्देशिका पेड़ को फिर से शुरू करने के लिए आवेदन पर निर्भर है।
निश्चित रूप से शेल का उपयोग करके अपने PYTHONPATH चर में एक निर्देशिका के उपनिर्देशिका जोड़ना संभव है। मैं वर्तमान में अपने .bashrc में निम्नलिखित के समान कुछ का उपयोग करता हूं:
export PYTHONPATH="$(find $HOME/ -maxdepth 2 -type d | sed '/\/\./d' | tr '\n' ':' | sed 's/:$//')"
इसमें आपके उपयोगकर्ता फ़ोल्डर के सभी उपनिर्देशिका शामिल होंगे जो पेड़ में 2 की गहराई तक हो। खोज आदेश निर्देशिकाओं ('-type d') का पता लगाता है, और निम्न sed और tr कमांड PATH चर के सामान्य तरीके से आउटपुट को प्रारूपित करता है।
'-Maxdepth 2' को छोड़ने से आपके होम फ़ोल्डर के सभी उपनिर्देशिका शामिल होंगे, जो संभवतः खोज करने के लिए काफी है। शायद यह केवल आपके $ घर / भंडार / अजगर-सामान निर्देशिका में किया जाना चाहिए।