PYTHONPATH पर्यावरण चर ... मैं बाद में हर उपनिर्देशिका कैसे बनाऊं?


9

मैं वर्तमान में ऐसा करता हूं:

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

मैं इसे कैसे बना सकता हूं ताकि PYTHONPATH सब कुछ को अप्रत्यक्ष रूप से शामिल कर सके?

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

जवाबों:


14

यही नहीं 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 की तरह कुछ भी व्यवहार नहीं करता है । इस संबंध में पैकेज के लिए दुभाषिया के समर्थन को देखते हुए, निश्चित रूप से एक बेहतर तरीका है कि आप क्या कर रहे हैं?


3
यार, मैं चाहता हूं कि आप प्रत्येक साइट को विशेषाधिकार पोस्ट करने से पहले आपके अन्य खातों की जांच करेंगे। यह रेप से शुरू होता है, विशेष रूप से वन-यूआरएल लिमिट जैसी चीजों के साथ ... (मेरे पास आपके लिए अधिक संदर्भ हैं, ओपी)
जेड स्मिथ

1

यह नहीं है कि पर्यावरण पैठ चर कैसे काम करता है - आप इसे शीर्ष-स्तरीय निर्देशिका देते हैं और अगर यह जरूरत है तो निर्देशिका पेड़ को फिर से शुरू करने के लिए आवेदन पर निर्भर है।


इसलिए, अगर मेरे पास /home/$USER/myfile.py के तहत एक अजगर फ़ाइल है तो क्या मैं इसे आयात कर सकता हूं?
एलेक्स

ज़रूर, तुम क्यों नहीं कर सकते थे?
ईईएए

1

निश्चित रूप से शेल का उपयोग करके अपने PYTHONPATH चर में एक निर्देशिका के उपनिर्देशिका जोड़ना संभव है। मैं वर्तमान में अपने .bashrc में निम्नलिखित के समान कुछ का उपयोग करता हूं:

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

इसमें आपके उपयोगकर्ता फ़ोल्डर के सभी उपनिर्देशिका शामिल होंगे जो पेड़ में 2 की गहराई तक हो। खोज आदेश निर्देशिकाओं ('-type d') का पता लगाता है, और निम्न sed और tr कमांड PATH चर के सामान्य तरीके से आउटपुट को प्रारूपित करता है।

'-Maxdepth 2' को छोड़ने से आपके होम फ़ोल्डर के सभी उपनिर्देशिका शामिल होंगे, जो संभवतः खोज करने के लिए काफी है। शायद यह केवल आपके $ घर / भंडार / अजगर-सामान निर्देशिका में किया जाना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.