2008-11-17 13 views
5

समस्या सरल है:मैं एक कॉलन के साथ PYTHONPATH में निर्देशिका कैसे जोड़ूं?

बैश का उपयोग करके, मैं स्क्रिप्ट निष्पादन की आसानी के लिए अपने PythonPATH में एक निर्देशिका जोड़ना चाहता हूं। दुर्भाग्य से, मैं जिस निर्देशिका का उपयोग करना चाहता हूं वह इसमें है: इसमें। इसलिए मैं निम्नलिखित में से प्रत्येक

export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.com:3344/ 
export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.com\:3344/ 
export PYTHONPATH=${PYTHONPATH}:"/home/shane/mywebsite.com:3344/" 

इनमें से कोई भी काम नहीं करता है। हर बार, पथ पाइथन में पथ पर दो अलग निर्देशिका के रूप में बनाया गया है। मेरा सवाल है, क्या यह बैश के लिए ऐसा करना संभव है? यदि हां, तो वाक्यविन्यास क्या आवश्यक है? एस्केपिंग सीधे व्याख्या की है, और एक शाब्दिक में बदल

export PYTHONPATH=${PYTHONPATH}:"/home/shane/mywebsite.com\:3344/" 

समस्या उद्धरण चिह्नों के बिना है,: स्ट्रिंग में ":"

+7

क्यों न सिर्फ अपने फ़ोल्डर का नाम बदलें? या पूरी तरह से हटा दिया? –

+1

@ ओजे: बढ़िया सवाल! जो मैं एक टिप्पणी ऊपर उठा सकता है। –

+0

@ एसएलट विडंबना :) क्या आप ही टिप्पणियों पर अप-वोटिंग का अनुरोध कर चुके थे? – orokusaki

उत्तर

8

समस्या बाश के साथ नहीं है। यह आपके पर्यावरण चर को सही ढंग से सेट करना चाहिए, : वर्ण के साथ पूरा करें।

समस्या, इसके बजाय, PYTHONPATH चर के पाइथन की पार्सिंग के साथ समस्या है। PATH variable द्वारा निर्धारित उदाहरण के बाद, ऐसा लगता है कि कोई भी बचने वाला चरित्र नहीं है, इसलिए : को विभाजक के अलावा कुछ और समझने का कोई तरीका नहीं है। आप इसे Python interpreter source code में अपने लिए देख सकते हैं।

एकमात्र समाधान है, जैसा कि कई लोगों ने पहले से ही उल्लेख किया है, एक सिम्लिंक या कुछ और उपयोग करने के लिए ताकि आप अपनी निर्देशिकाओं के लिए कोलन-कम नाम दे सकें।

+2

तो यह पायथन में एक बग है: एक विशेष चरित्र जो बच नहीं सकता है। – Svante

+1

@ हार्लेक्विन: तो आप नहीं जानते कि एक बग क्या है: कुछ ऐसा जो विनिर्देश के रूप में काम नहीं करता है कहता है। – tzot

2

केवल एक ही आप की कोशिश नहीं की है। लेकिन ":" को बाद में मूल्यांकन करने की आवश्यकता है।

$ echo "foo:" 
foo: 
$ echo \:foo 
:foo 
$ echo ":foo" 
:foo 
$ echo "\:foo" 
\:foo 

मैं गारंटी नहीं दे सकते कि यह आपके अजगर-पथ समस्या को ठीक होगा, लेकिन यह स्ट्रिंग में \ शाब्दिक मिल जाएगा।

1

तो क्या आप चाहते हैं सीधे संभव है मैं नहीं जानता, लेकिन एक वैकल्पिक हल यदि आप एक linux फ़ाइल सिस्टम का उपयोग कर रहे हैं हो सकता है अपने "coloned" निर्देशिका में एक सिमलिंक बना सकते हैं और इस तरह से अपनी PYTHONPATH को यह सिमलिंक जोड़ने के लिए:

ln -s /home/shane/mywebsite.com\:3344 /home/shane/mywebsite.3344 
export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.3344 
0

सिम्लिंक हैक शायद एकमात्र व्यवहार्य विकल्प है, जब तक कि कुछ ह्यूरिस्टिक नहीं है कि यह निर्धारित करने के लिए कि पाइथनपैथ में कोलों को कैसे संभाला जाए।

0

ओपी पोर्ट पथों की सूची में पोर्ट नंबर के साथ एक यूआरएल जोड़ने की कोशिश कर रहा था। इस प्रकार का यूआरएल फ़ाइल पथ नहीं है, इसलिए उस स्थान पर पायथन को कभी भी एक पायथन फ़ाइल नहीं मिलेगी। PYTHONPATH में एक पोर्ट नंबर के साथ एक यूआरएल डालने का अर्थ नहीं है।

भले ही, कुछ लोगों को निम्नलिखित की वजह से इस सवाल पर खत्म हो सकता है:

विंडोज रास्तों पर, उसके बाद एक कॉलन ड्राइव designators है C:/Python27/lib की तरह। विंडोज पर बैश में आप इस तरह अर्धविराम PYTHONPATH करने के लिए कई रास्तों जोड़ सकते हैं: ":" कुछ और साथ बदल दिया है ताकि

$ export PYTHONPATH="C:\MYPATH1;C:\MYPATH2" 
$ python -i 
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.path 
['', 'C:\\MYPATH1', 'C:\\MYPATH2', 'C:\\Windows\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Python27\\lib\\site-packages\\win32', 'C:\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\Python27\\lib\\site-packages\\Pythonwin'] 
संबंधित मुद्दे