मैं अजगर का उपयोग करके अपने अजगर पथ का पता कैसे लगाऊं?


350

PYTHONPATHपायथन स्क्रिप्ट (या इंटरेक्टिव शेल) के भीतर से मुझे यह कैसे पता चलेगा कि मेरे सिस्टम के वैरिएबल में कौन से डायरेक्टरीज़ लिस्टेड हैं ?


24
मुझे यकीन नहीं है कि आप क्या करने की कोशिश कर रहे हैं, लेकिन अगर आप जानना चाहते हैं कि आयात किए जा रहे मॉड्यूल की खोज के लिए कौन से फ़ोल्डर्स का उपयोग किया जाता है तो आपको भरोसा नहीं करना चाहिए PYTHONPATH। उसके लिए उपयोग करें sys.path
वानुअन

सरल प्रयोग से, मुझे नीचे वानुआन का उत्तर मिला (मुद्रण sys.path) सिर्फ PYTHONPATH प्रिंट करता है। जब हम PYTHONPATH को जोड़ते हैं, तो हम add_path (new_path) का उपयोग करके मान को बदल देते हैं।
किम

6
इस पद का शीर्षक और शरीर दो अलग-अलग प्रश्न पूछते हैं। sys.path"स्ट्रिंग्स की एक सूची है जो मॉड्यूल के लिए खोज पथ को निर्दिष्ट करती है" - docs.python.org/2/library/sys.html#sys.path । PYTHONPATH एक पर्यावरण चर है जो इस सूची को प्रभावित करता है। किसी भी उचित परिभाषा sys.pathसे आपका "अजगर पथ" है।
2

4
के बारे में मत भूलना python -m site
एंड्रयू मैकिन्ले जुले

जवाबों:


236

sys.pathऐसे आइटम शामिल हो सकते हैं जो विशेष रूप से आपके PYTHONPATHपर्यावरण चर में नहीं हैं । चर को सीधे क्वेरी करने के लिए, उपयोग करें:

import os
try:
    user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
except KeyError:
    user_paths = []

3
(या, अधिक उदारतापूर्वक ... विभाजन (os.sep))। यह पता नहीं लगा सकते कि आपको प्यार क्यों नहीं मिल रहा है, मार्क। आपका उत्तर तकनीकी रूप से पॉल डी वेइट के अपने प्रश्न के उत्तर से अधिक सटीक है ????
एमजेवी

5

2
और विभाजक के साथ यह समस्या शायद मुझे प्यार नहीं मिल रही थी। मुझे साफ - साफ समझाने के लिए धन्यवाद।
मार्क रैनसम

11
और यदि कोई KeyError प्राप्त करता है, तो क्या इसका अर्थ है कि PYTHONPATH मेरे सिस्टम में परिभाषित नहीं है? क्या यही समस्या है? धन्यवाद
glarrain

9
@glarrin, सही - KeyError का अर्थ है कि PYTHONPATH परिभाषित नहीं है। यह एक समस्या नहीं होगी क्योंकि पहले से ही डिफ़ॉल्ट पथ सेट अप हैं, देखें sys.path
मार्क रैनसम

600

आप भी शायद यही चाहेंगे:

import sys
print(sys.path)

या टर्मिनल से एक लाइनर के रूप में:

python -c "import sys; print('\n'.join(sys.path))"

कैविएट : यदि आपके पास पायथन के कई संस्करण स्थापित हैं, तो आपको इसी कमांड का उपयोग करना चाहिए python2या python3


वही। Linux aaa.com 2.6.18-4-686-bigmem # 1 SMP Wed Jun 6 09:41:07 UTC 2007 i686 GNU / लिनक्स ... डेबियन
सर्ज

7
यह प्लेटफॉर्म- और पर्यावरण- वर्तमान रनटाइम पायथन पथ को प्राप्त करने का स्वतंत्र तरीका है।
दिमित्री मिनकोवस्की

13
यह उत्तर स्वीकृत स्थिति की तुलना में मेरी स्थिति के लिए अधिक उपयोगी था। मुझे पता है कि मेरा पर्यावरण चर क्या है। मुझे यह जानने की जरूरत है कि मेरे पर्यावरण चर के अलावा अजगर ने कहां इशारा किया।
वोर्टिसिटी

पायथन 3 के लिए:python -c "import sys; print('\n'.join(sys.path))"
mirceamironenco

@ मिरिकेमिरोनेंको बदल गया
वानुआन

10

अन्य उत्तर को संपादित करने के लिए प्रतीत नहीं हो सकता। इसमें एक छोटी सी त्रुटि है कि यह केवल विंडोज है। अधिक सामान्य समाधान नीचे के रूप में os.sep का उपयोग करना है:

sys.path में वे आइटम शामिल हो सकते हैं जो विशेष रूप से आपके PYTHONPATH परिवेश चर में नहीं हैं। चर को सीधे क्वेरी करने के लिए, उपयोग करें:

import os
os.environ['PYTHONPATH'].split(os.pathsep)

6
भविष्य के पाठकों के लिए: os.sepऑपरेटिंग सिस्टम के लिए निर्देशिका विभाजक लौटाता है, उदाहरण के लिए /। पाइथन पथ में प्रयुक्त विभाजक अलग है, और os.pathsepस्वीकृत उत्तर में दिखाए अनुसार लौटा है ।
पॉल डी। वेट

3

PYTHONPATH एक पर्यावरण चर है जिसका मूल्य निर्देशिकाओं की एक सूची है। एक बार सेट करने के बाद, इसका उपयोग पायथन द्वारा अन्य मॉड्यूल के साथ, आयातित मॉड्यूल की खोज के लिए किया जाता है। और पायथॉन के "sys.path" में सूचीबद्ध 3-पार्टी लाइब्रेरी निर्देशिका।

किसी भी अन्य पर्यावरण चर के रूप में, आप इसे शेल में या ~ / .bashrc में निर्यात कर सकते हैं, यहां देखें । आप पायथन में इसके मूल्य के लिए os.environ ['PYTHONPATH'] को क्वेरी कर सकते हैं जैसा कि नीचे दिखाया गया है:

$ python3 -c "import os, sys; print(os.environ['PYTHONPATH']); print(sys.path) if 'PYTHONPATH' in sorted(os.environ) else print('PYTHONPATH is not defined')"

यदि शेल में परिभाषित किया गया है

$ export PYTHONPATH=$HOME/Documents/DjangoTutorial/mysite

परिणाम =>

/home/Documents/DjangoTutorial/mysite
['', '/home/Documents/DjangoTutorial/mysite', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

ELSE परिणाम =>

PYTHONPATH is not defined

PYTHONPATH को कई रास्तों पर सेट करने के लिए, यहाँ देखें ।

ध्यान दें कि कोई रन-टाइम पर sys.path.insert (), डेल या रिमूव () के माध्यम से खोज पथ को जोड़ या हटा सकता है, लेकिन os.environ [] के माध्यम से नहीं। उदाहरण:

>>> os.environ['PYTHONPATH']="$HOME/Documents/DjangoTutorial/mysite"
>>> 'PYTHONPATH' in sorted(os.environ)
True
>>> sys.path // but Not there
['', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

>>> sys.path.insert(0,os.environ['PYTHONPATH'])
>>> sys.path // It's there
['$HOME/Documents/DjangoTutorial/mysite', '', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']
>>> 

सारांश में, PYTHONPATH sys.path में आयातित मॉड्यूल के लिए पायथन खोज पथ (s) को निर्दिष्ट करने का एक तरीका है। आप PYTHONPATH की सहायता के बिना भी सीधे sys.path पर सूची संचालन लागू कर सकते हैं।


0

पायथन मुझे बताता है कि यह कहाँ रहता है जब यह मुझे एक त्रुटि संदेश देता है :)

>>> import os
>>> os.environ['PYTHONPATH'].split(os.pathsep)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\martin\AppData\Local\Programs\Python\Python36-32\lib\os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'PYTHONPATH'
>>>

-1

इसे इस्तेमाल करो:

import sys
print(sys.executable)

या cmd से एक लाइन:

python -c "import sys; print(sys.executable)"

1
ऐसा लगता है कि प्रश्न का लेखक अजगर निर्देशिकाओं की सूची के लिए पूछ रहा है, जो वास्तविक अजगर निष्पादन के लिए रास्ता नहीं है।
सर्गेई शुभिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.