2013-03-04 4 views
22

मैं एक ऐसे सिस्टम पर खोजने योग्य मॉड्यूल बनाने की कोशिश कर रहा हूं जहां मेरे पास वैश्विक site-packages निर्देशिका में लेखन पहुंच नहीं है, और पर्यावरण को बदलने के बिना (PYTHONPATH)। मैंने एक निर्देशिका में .pth फ़ाइल को उसी स्क्रिप्ट के रूप में रखने की कोशिश की है जिसे मैं निष्पादित कर रहा हूं, लेकिन ऐसा अनदेखा प्रतीत होता है।.pth फ़ाइलों का उपयोग

N:\PythonExtras\lib\site-packages 

लेकिन निम्न स्क्रिप्ट, रखा जाता है और एक ही निर्देशिका में चलाने के लिए, प्रिंट False: जैसे, मैं निम्नलिखित सामग्री के साथ एक फ़ाइल extras.pth बनाया।

import sys 
print r"N:\PythonExtras\lib\site-packages" in sys.paths 

sys.path में केवल निर्देशिका के लिए जो मैं लेखन पहुँच गई स्क्रिप्ट से युक्त निर्देशिका है। क्या कोई अन्य (वर्तमान में मौजूद नहीं है) निर्देशिका है जहां मैं extras.pth रख सकता हूं और इसे देखा जा सकता है? क्या इसके बारे में जाने का कोई बेहतर तरीका है?

मैं विंडोज पर पायथन 2.7 का उपयोग कर रहा हूं। सभी .pth प्रश्न जो मैं यहां सिस्टम मॉड्यूल निर्देशिकाओं का उपयोग कर सकता हूं।

संपादित करें: मैंने विंडोज़ प्रति उपयोगकर्ता स्थापना निर्देशिका को %APPDATA%\Python\Python27\site-packages पर ट्रैक किया है। मैं वहां एक मॉड्यूल रख सकता हूं और इसे आयात किया जाएगा, लेकिन अगर मैंने वहां .pth फ़ाइल डाली है, तो इसका कोई प्रभाव नहीं पड़ता है। क्या यह वास्तव में काम नहीं करना चाहिए, या क्या मैं कुछ गलत कर रहा हूं?

उत्तर

37

जैसा कि the documentation में वर्णित है, पीटीएच फाइलें केवल तभी संसाधित की जाती हैं जब वे साइट-पैकेज निर्देशिका में हों। (अधिक सटीक, वे संसाधित होते हैं यदि वे "साइट निर्देशिका" में हैं, लेकिन "साइट निर्देशिका" ही पाइथन स्थापना के लिए वैश्विक सेटिंग है और यह वर्तमान निर्देशिका या निर्देशिका पर निर्भर नहीं है जहां स्क्रिप्ट रहता है।)

यदि आपकी स्क्रिप्ट वाली निर्देशिका sys.path पर है, तो आप उस निर्देशिका में sitecustomize.py बना सकते हैं। पाइथन शुरू होने पर यह लोड हो जाएगा। sitecustomize.py के अंदर, आप कर सकते हैं:

import site 
site.addsitedir('/some/dir/you/want/on/the/path') 

यह केवल कि निर्देशिका में शामिल नहीं होगा, लेकिन एक "साइट निर्देशिका" के रूप में यह जोड़ना होगा, जिससे वहाँ PTH फ़ाइलें संसाधित करने के लिए। यह आसान है अगर आप अपनी व्यक्तिगत site-packages -like-निर्देशिका बनाना चाहते हैं।

यदि आपको केवल पथ में एक या दो निर्देशिकाएं जोड़ने की आवश्यकता है, तो आप बस इतना आसान कर सकते हैं। बस एक छोटी पायथन लाइब्रेरी बनाएं जो sys.path का उपयोग करे, और उसके बाद उस लाइब्रेरी को अपनी स्क्रिप्ट से आयात करें।

# makepath.py 
import sys 
sys.path.append('/whatever/dir/you/want') 

# script.py 
import makepath 

संपादित करें:: की तरह कुछ फिर से, the documentation के अनुसार, वहाँ %APPDATA%\Python\PythonXY\site-packages (Windows पर) में एक साइट विशिष्ट निर्देशिका की संभावना है। आप इसे आजमा सकते हैं, अगर वास्तव में आपके पास उस तक पहुंच पहुंच है (और न केवल आपकी स्क्रिप्ट निर्देशिका में)।

+0

समस्या यह है कि यह कक्षा को पढ़ाने के लिए है, और मैं इसे यथासंभव पारदर्शी रूप से काम करने की कोशिश कर रहा हूं। लोग हमेशा एक नया अजगर शुरू कर रहे हैं और परेशानी में चल रहे हैं। क्या 'दस्तावेज़ और सेटिंग्स' के अंतर्गत कुछ फ़ोल्डर्स नहीं हैं जो "साइट निर्देशिका" के रूप में गिना जाता है? आईआईआरसी विभिन्न इंस्टॉलर वहां सामान डाल देंगे - लेकिन यह सुनिश्चित नहीं है कि, या यदि उनकी '.pth' फ़ाइलों के लिए जांच की गई है। – alexis

+0

हां, वहां है, और यह अन्य सभी चीज़ों के साथ http://docs.python.org/2/library/site.html#site.USER_SITE पर दस्तावेज़ित है। मैंने सोचा था कि आपने कहा था कि आपके पास केवल स्क्रिप्ट निर्देशिका में पहुंच है, लेकिन अब मैं देखता हूं कि मैं गलत पढ़ता हूं। – BrenBarn

+0

हाँ धन्यवाद, मैं उस साइट को समझ रहा हूं।एचटीएमएल' देखने के लिए जगह है। हालांकि, '.pth' डालने पर काम नहीं लग रहा है ... – alexis

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