2009-06-16 16 views
10

पर्यावरण: डेबियन 4.0PYTHONPATH नजरअंदाज कर दिया

अजगर 2.4

मेरे 'परियोजना' में स्थापित किया गया है:

/usr/lib/python2.4/site-packages/project।

लेकिन मैं बजाय स्थापित है जिसमें स्थित है मेरे कार्य प्रतिलिपि का उपयोग करना चाहते हैं:

/घर/मुझे/dev/परियोजना/src

तो मैं क्या कर है:

निर्यात PYTHONPATH =/घर/मुझे/dev/परियोजना/src

IPython

आयात foo # जो src में है

foo.__file__

*/usr/lib/python2.4/site-packages/project/foo.py* 
बजाय

:

/घर/मुझे/dev/परियोजना/src/परियोजना/foo .py

कैसे आते हैं? मैं pathes (निर्यात ऊपर किया जाने के बाद) की जांच करने के लिए प्रयास करें और क्या मैं देख रहा हूँ है:

आयात सिस, ओएस

sys.path

[ ', '/usr/बिन ', ' /usr/lib/python2.4/site-packages ', '/home/me/dev/project/src ', ' /usr/lib/python24.zip ', '/usr/lib/python2.4 ', ' /usr/lib/python2.4/plat-linux2 ', ' /usr/lib/python2.4/lib-tk ', '/u sr/lib/python2.4/lib-dynload ', ' /usr/local/lib/python2.4/site-packages ', ' /usr/lib/python2.4/site-packages/PIL ', '/var/lib/python-support/python2.4', '/usr/lib/python2.4/site-packages/IPython/Extensions', '/home/me/.ipython']

os.environ [ 'PYTHONPATH']

/घर/मुझे/dev/परियोजना/src

+1

मशीन ठीक से काम: > निर्यात PYTHONPATH = foo > IPython > आयात sys > * sys.path = [ '/etc/python2.4', '/ घर/मुझे/foo ', ' /usr/lib/python24.zip ', ' /usr/lib/python2.4 ', ' /usr/lib/python2.4/plat-linux2 ', '/usr/lib/python2 .4/lib-tk ', ' /usr/lib/python2.4/lib-dynload ', ' /usr/local/lib/python2.4/site-packages ', '/usr/lib/python2 .4/साइट-पैकेज ', '/var/lib/python-support/python2.4', ] * मशीन में ठीक से काम नहीं कर रहा है, */usr/lib/python2। हर कोई इस बात से सहमत है कि अगर मैं एक वैध मॉड्यूल पथ के लिए PYTHONPATH निर्धारित करते हैं, यह पहली बार परवाह किए बिना इस मॉड्यूल लोड करना चाहिए: 4/साइट-संकुल * सूची में पहले से चला जाता है ... –

+0

के बजाय कुछ सटीक सवाल करते हैं? हर कोई इससे सहमत हैं कि अजगर की कोशिश करता sys.path के आदेश निम्नलिखित मॉड्यूल लोड करने के लिए? तो aboce सही है, तो क्यों अजगर PYTHONPATH sys.path (अंडे के बाद) की शुरुआत में सम्मिलित नहीं करता है? –

उत्तर

0

मैं तुम्हें/घर/मुझे/निर्माण/जनसंपर्क के लिए PYTHONPATH की स्थापना लगता है oject/src के बाद से/home/me/dev/project/src sys.path में प्रकट नहीं होता है, लेकिन/home/me/build/project/src करता है।

+0

धन्यवाद डेविड। sys.path में/home/me/dev/project/src इसके बजाय/home/me/build/project/src शामिल है (जैसा कि मैंने कुछ सामानों का नाम बदल दिया है वहां वहां एक गलती थी)। मुद्दा बनी हुई है। –

1

मैं '/ home/me/dev/project/src' से पहले अपने पथ में '/usr/lib/python2.4/site-packages' देखता हूं, क्या इससे कोई फर्क पड़ता है?क्या होता है जब आप दो स्विच करते हैं?

डॉक्स से

:

जब PYTHONPATH सेट नहीं है, या जब फ़ाइल वहाँ नहीं पाया जाता है, खोज एक अधिष्ठापन पर निर्भर डिफ़ॉल्ट पथ

तो शायद आप नहीं था में जारी है ' जैसा कि आपने सोचा था, अपनी पाइथनपैथ पर अपनी कामकाजी प्रतिलिपि नहीं ढूंढें?

+0

मुझे लगता है कि जॉन सही है, अजगर, sys.path – wodemoneke

+0

हाँ में सबसे कम सूचकांक के साथ मॉड्यूल का उपयोग करेगा कि मायने रखती है। अजगर, AFAIK, PYTHONPATH पहले डालूँ (या बस के बाद '।') मेरे PYTHONPATH सही है। –

+1

लेकिन अगर आप इस तरह में/घर/मुझे/dev/परियोजना/src __init__.py फ़ाइल निकालने जैसी, कोई त्रुटि हुई है, तो अजगर साइट-संकुल –

4

मुझे विश्वास नहीं है कि आपके पास कोई नियंत्रण नहीं है जहां PYTHONPATH वास्तविक पथ सूची में डाला जाता है। लेकिन यह पथ को संशोधित करने का एकमात्र तरीका नहीं है - आप परियोजना को आयात करने का प्रयास करने से पहले, sys.path को स्वयं अपडेट कर सकते हैं।

संपादित करें: अपने विशिष्ट मामले में, आप अजगर प्रलेखन के अनुसार

import sys 
sys.path.insert(2, '/home/me/dev/project/src') 
+1

तो मैं पाइथन को मजबूर नहीं कर सकता जहां मॉड्यूल की तलाश है? –

+0

मुझे पता है कि। लेकिन मैं कोड पर छूना नहीं चाहता हूं। –

+0

यह आईपीथॉन नोटबुक का उपयोग करके मेरे लिए काम करता था, जबकि कमांड शैल पर PYTHONPATH को सेट नहीं किया गया था। धन्यवाद। – darKoram

6

साथ पथ को संशोधित कर सकते, इस अपेक्षित व्यवहार: https://docs.python.org/2.4/lib/module-sys.html:

सूचना है कि स्क्रिप्ट निर्देशिका से पहले प्रविष्टियां डाइथन PATTHONPATH के परिणामस्वरूप डाली गईं ।

अजगर 2.6 के तहत यह अलग है: http://docs.python.org/tutorial/modules.html#the-module-search-path

+1

मैं अंडे के साथ ठीक हूँ। :) लेकिन क्यों '/usr/lib/python2.4/site-packages' मेरे पायथन पथ से पहले आता है? पायथन फ़ाइल के भीतर sys.path को बदले बिना 'pusthonPATH को' /usr/lib/python2.4/site-packages 'से अधिक प्राथमिकता के लिए कैसे मजबूर कर सकता हूं? –

+0

@joseph: उत्तर अपडेट किया गया। – van

+0

@van। मुझे यह नहीं मिला। मैंने PythonPATH को कुछ सही करने के लिए सेट किया है और यह साइट-पैकेज में पहले क्या लोड करता है। विचित्र! –

0

ऐसा लगता है src निर्देशिका एक __init__.py फ़ाइल नहीं है। यह एक उचित पैकेज नहीं है।

+0

जैसा कि आप ऊपर देखेंगे, वहां एक है। –

+0

@ एसएलॉट क्षमा करें। मैंने जो कहा वह है "__init __। Py' है ('/home/me/dev/project/src' में) " –

1

आपके प्रश्न का सीधा जवाब नहीं है, लेकिन आप विकास वातावरण बनाने के लिए virtualenv का भी उपयोग कर सकते हैं। उस वर्चुअलएएनवी में आप अपने उत्पाद को/home/me/dev/project/src में विकास पैकेज के रूप में स्थापित कर सकते हैं: "python setup.py develop"।

इस तरह आपको मैन्युअल रूप से अपने PYTHONPATH को बदलने की ज़रूरत नहीं है। यदि आप विकास कोड का उपयोग करना चाहते हैं तो बस वर्चुअलएन्व को सक्रिय करें।

5

मुझे समस्या मिली (मुझे शुरुआती याद आया जब किसी ने मुझे Where is Python's sys.path initialized from? पर इंगित किया)।

ऐसा लगता है कि easy_install एक pth फ़ाइल /usr/lib/python2.4/site-packages/easy-install.pth बनाता है जिसे तब site.py द्वारा लोड किया जाता है। यह PYTHONPATH से पहले sys पथ में साइट-संकुल पथ को सम्मिलित करता है। अच्छा नहीं है।

संबंधित मुद्दे