मैं virtualenv में PYTHONPATH का पथ कैसे जोड़ूं?


97

मैं PYTHONPATH पर्यावरण चर के लिए एक रास्ता जोड़ने की कोशिश कर रहा हूं, जो केवल एक विशेष virtualenv पर्यावरण से दिखाई देगा।

मैंने SET PYTHONPATH=...एक virtualenv कमांड प्रॉम्प्ट के तहत कोशिश की , लेकिन यह पूरे वातावरण के लिए चर सेट करता है।

मैं इसे कैसे प्राप्त करूं?

जवाबों:


155

आप आमतौर पर फ़ाइलों का उपयोग करके.pth PYTHONPATH के साथ कुछ भी करने से बच सकते हैं । बस अपने virtualenv के साइट-संकुल फ़ोल्डर में .pth एक्सटेंशन (कोई भी बेसन काम करता है) के साथ एक फ़ाइल डालें, उदाहरण के लिए lib\python2.7\site-packages, अपने पैकेज में केवल एकमात्र सामग्री के रूप में निर्देशिका के पूर्ण पथ के साथ।


दुर्भाग्य से यह ओवरराइड के रूप में काम नहीं करता है। यह पथ को जोड़ता है, इसलिए यदि आप इसे विकसित कर रहे हैं तो यह काम नहीं करता है।
एरिक एरोनिटी

इसके अलावा, यदि आप निरपेक्ष मार्ग को जानते हैं, तो चर का क्या मतलब है?
जेमी मार्शल

आप अपने वर्चुअल वातावरण के साइट-संकुल फ़ोल्डर में भी जा सकते हैं और .pth फ़ाइल का एक प्रतीकात्मक लिंक इस तरह बना सकते हैं: ln -s path / to / somfile.pth। मुझे यह उपयोगी लगा जब मुझे एक ही निर्देशिका की आवश्यकता थी जो कई आभासी वातावरण में सुलभ हो
डेटा-फ़िले

91

यदि आप उपयोग कर रहे हैं virtualenv, तो आपको शायद virtualenvwrapper का उपयोग करना चाहिए , जिस स्थिति में आप वर्तमान virtualenv के लिए पायथन पथ में पथ जोड़ने के लिए add2virtualenv कमांड का उपयोग कर सकते हैं :

add2virtualenv directory1 directory2 …


3
Virtualenv से हटाने के बारे में कैसे?
चांदीदग्गर

1
मैं एक अनुकूल टिप्पणी जोड़ना चाहता हूं कि साझा होस्ट और इसी तरह की स्थितियों में वेव रैपर वांछित नहीं हैं। ऐसे मामलों में एक वेव प्रभाव में होता है और अतिरिक्त स्थापित करने के लिए आवश्यक सभी को वांछित नहीं किया जाता है। स्थानीय स्तर पर चीजें अलग हैं, लेकिन सर्वर पर / छवि KISS वास्तव में महत्वपूर्ण है।
मार्क

2
मुझे यकीन नहीं है कि जब यह लिखा गया था तो कमांड ने कैसे काम किया, लेकिन add2virtualenv$ PYTHONPATH को संशोधित नहीं करता है, बल्कि यह sys.path को संशोधित करता है।
फॉरएवरविंटर

1
@ajostergaard: क्षमा करें, मुझे एक स्रोत प्रदान करना चाहिए था। यदि आप के लिए स्रोत कोड add2virtualenvको देखते हैं, तो आप देख सकते हैं कि यह sys.path को संशोधित कर रहा है। मैं मानता हूं कि डॉक्स इसे ध्वनि बनाते हैं जैसे यह PYTHONPATHपर्यावरण चर को संशोधित करता है , लेकिन यह गलत प्रतीत होता है। bitbucket.org/virtualenvwrapper/virtualenvwrapper/src/…
फॉरएवरविंटर

1
@ForeverWintr मैं सही खड़ा हूँ - .pth फ़ाइलों को sys.path सेटअप करने के लिए उपयोग किया जाता है। docs.python.org/2/library/site.html Confused.com!
१oster:०

5

आप अपने किसी virtualenv के लिए सिमलिंक लगाने का भी प्रयास कर सकते हैं।

जैसे। 1) अपने virtualenv को सक्रिय करें 2) पायथन 3 चलाएं) आयात करें sys और चेक sys.path 4) आपको वहां अजगर खोज पथ मिलेगा। उनमें से किसी एक को चुनें (जैसे। साइट-पैकेज) 5) वहां जाएं और अपने पैकेज के लिए सिमिलिंक बनाएं जैसे: ln -s path-to-your-पैकेज नाम-जिसके-साथ-आप-आयात कर रहे हैं

इस तरह से आप अपने virtualenv को सक्रिय किए बिना भी इसे आयात करने में सक्षम होना चाहिए। बस कोशिश करें: पथ-से-आपके-वर्चस्व-फ़ोल्डर / बिन / अजगर और अपने पैकेज को आयात करें।


मुझे लगता है कि यह .pth फ़ाइलों के बजाय सिम्बलिंक का उपयोग करने के लिए अस्वीकृत कर दिया गया था। यह मेरे लिए काम किया है, हालांकि, whavever।
गैरेथ डेविडसन

3

यदि आप virtualenvwrapper का उपयोग कर रहे हैं,

$ cd to the parent folder
$ add2virtualenv  folder_to_add

कंसोल प्रदर्शित करेगा

Warning: Converting "folder_to_add" to "/absoutle/path/to/folder_to_add"

यही है, और आपको जाने के लिए अच्छा होना चाहिए


1
import sys
import os

print(str(sys.path))

dir_path = os.path.dirname(os.path.realpath(__file__))
print("current working dir: %s" % dir_path)

sys.path.insert(0, dir_path)

मैं दृढ़ता से सुझाव देता हूं कि आप मार्ग को अव्यवस्थित करने से बचने के लिए virtualenv और virtualenvwrapper का उपयोग करें।


यदि आप किसी भी अजगर संस्करण के साथ काम करना चाहते हैं, तो बस फैंसी f- स्ट्रिंग f "... {dir_path}" के बजाय एक सामान्य पुराने शैली के स्ट्रिंग-प्रारूप का उपयोग करें
Guillaume S

टिप्पणी के लिए धन्यवाद। मैं उपयोग के लिए संशोधित। पुराने तरीके बोझिल और मुहावरेदार हैं और एक साधारण टेंपलेटिंग सिस्टम के बारे में कुछ भी कल्पना नहीं है
रबर डक

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