जब भी मैं उपयोग करता हूं sys.path.append, नई निर्देशिका जोड़ी जाएगी। हालाँकि, एक बार जब मैं अजगर को बंद कर दूंगा, तो सूची पिछले (डिफ़ॉल्ट) मानों पर वापस आ जाएगी। मैं स्थायी रूप से एक निर्देशिका कैसे जोड़ूं PYTHONPATH?
जब भी मैं उपयोग करता हूं sys.path.append, नई निर्देशिका जोड़ी जाएगी। हालाँकि, एक बार जब मैं अजगर को बंद कर दूंगा, तो सूची पिछले (डिफ़ॉल्ट) मानों पर वापस आ जाएगी। मैं स्थायी रूप से एक निर्देशिका कैसे जोड़ूं PYTHONPATH?
जवाबों:
आपको अपनी नई निर्देशिका को पर्यावरण चर में जोड़ने की जरूरत है PYTHONPATH, जो कि पिछली सामग्री से अलग है। यूनिक्स के किसी भी रूप में, आप एक स्टार्टअप स्क्रिप्ट में कर सकते हैं जो आपके द्वारा उपयोग किए जा रहे शेल ( .profileया जो कुछ भी, अपने पसंदीदा शेल के आधार पर) को एक कमांड के साथ उपयुक्त है, जो फिर से, प्रश्न में शेल पर निर्भर करता है; विंडोज में, आप इसे सिस्टम GUI के माध्यम से कर सकते हैं।
superuser.com अधिक जानकारी के लिए एक बेहतर स्थान हो सकता है, अर्थात अधिक विवरण के लिए यदि आपको अपने चुने हुए मंच और शेल में पर्यावरण चर को समृद्ध करने की आवश्यकता है, क्योंकि यह वास्तव में प्रति प्रोग्रामिंग प्रोग्रामिंग नहीं है।
यदि आप bash (Mac या GNU / Linux डिस्ट्रो पर) का उपयोग कर रहे हैं, तो इसे अपने में जोड़ें ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
~/.bashrcतो source ~/.bashrcदेखते हैं stackoverflow.com/questions/2518127/…
जोड़ तोड़ के बजाय PYTHONPATHआप एक पथ विन्यास फाइल भी बना सकते हैं । सबसे पहले पता करें कि पायथन किस निर्देशिका में इस जानकारी को खोजता है:
python -m site --user-site
किसी कारण से यह पायथन 2.7 में काम नहीं करता है। वहाँ आप उपयोग कर सकते हैं:
python -c 'import site; site._script()' --user-site
फिर .pthउस निर्देशिका में एक फ़ाइल बनाएं जिसमें वह पथ जोड़ना चाहते हैं (यदि वह मौजूद नहीं है तो निर्देशिका बनाएं)।
उदाहरण के लिए:
# find directory
SITEDIR=$(python -m site --user-site)
# create if it doesn't exist
mkdir -p "$SITEDIR"
# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"
python -m site --user-siteऔर (create the directory if it doesn't exist)भागों के लिए कि मैं क्या याद आ रही थी यह काम कर रहा हो रहे थे।
somelib.pth? यदि नहीं, तो कोई भी अनुमान लगाता है कि यह काम क्यों नहीं कर रहा है?
यह विंडोज पर काम करता है
तब आप अपनी स्क्रिप्ट से उन रास्तों के भीतर सभी मॉड्यूल देख पाएंगे।
मामले में कोई भी अभी भी भ्रमित है - यदि आप एक मैक पर हैं, तो निम्न कार्य करें:
open .bash_profileexport PYTHONPATH=$PYTHONPATH:foo/barexportकुंजी वह चीज थी जो मुझे याद आ रही थी !!!!, उत्कीर्ण, धन्यवाद बहुत!
आप अपने pythonrc फ़ाइल के माध्यम से पथ जोड़ सकते हैं, जो linux पर ~ / .pythonrc के लिए डिफॉल्ट करता है। अर्थात।
import sys
sys.path.append('/path/to/dir')
आप PYTHONPATHएक वैश्विक आरसी फ़ाइल में, जैसे ~/.profileकि मैक या लिनक्स पर, या नियंत्रण कक्ष -> सिस्टम -> उन्नत टैब -> पर्यावरण चर पर खिड़कियों में पर्यावरण चर सेट कर सकते हैं।
थोड़ा और स्पष्टीकरण देने के लिए, पायथॉन स्क्रिप्ट (आमतौर पर sys.prefix + और साथ ही स्थित ) का उपयोग करके स्वचालित रूप से अपने खोज पथ (जैसा कि ऊपर और यहां बताया गया है ) का निर्माण करेगा । कोई sys.prefix का मान प्राप्त कर सकता है:site.pylib/python<version>/site-packageslib/site-python
python -c 'import sys; print(sys.prefix)'
Site.py स्क्रिप्ट तो जैसे निर्देशिका, मंच पर निर्भर, के एक नंबर कहते हैं /usr/{lib,share}/python<version>/dist-packages, /usr/local/lib/python<version>/dist-packagesखोज पथ के लिए है और यह भी के लिए इन रास्तों खोज <package>.pthफ़ाइलें जो विशिष्ट अतिरिक्त खोज पथ शामिल config। उदाहरण के लिए आसान-स्थापित अपने स्थापित पैकेजों के संग्रह को बनाए रखता है जो उबंटू में सिस्टम विशिष्ट फ़ाइल में जोड़े जाते हैं /usr/local/lib/python2.7/dist-packages/easy-install.pth। एक विशिष्ट प्रणाली पर इन .pth फ़ाइलों का एक गुच्छा होता है, जिसके चारों ओर sys.path में कुछ अनपेक्षित रास्तों की व्याख्या की जा सकती है:
python -c 'import sys; print(sys.path)'
तो एक .pth फ़ाइल बना सकते हैं और इनमें से किसी भी निर्देशिका में डाल सकते हैं ( ऊपर बताए गए अनुसार सिदिर सहित )। ऐसा लगता है कि PYTHONPATH का उपयोग करने के विपरीत अधिकांश पैकेज sys.path में जुड़ जाते हैं।
नोट: OSX पर 'फ्रेमवर्क बिल्ड्स' (लेकिन अजगर के सामान्य कमांड लाइन के उपयोग के लिए काम करने के लिए लगता है) के लिए site.py द्वारा जोड़ा गया एक विशेष अतिरिक्त खोज पथ है: /Library/Python/<version>/site-packages(उदाहरण के लिए Python2.7:) /Library/Python/2.7/site-packages/जो कि 3 पार्टी पैकेज माना जाता है स्थापित किया जाना है (उस dir में README को देखें)। तो कोई अतिरिक्त खोज पथ वाले पथ कॉन्फ़िगरेशन फ़ाइल को जोड़ सकता है जैसे कि एक फ़ाइल बनाएँ /Library/Python/2.7/site-packages/pip-usr-local.pthजिसमें समाहित हो /usr/local/lib/python2.7/site-packages/और फिर सिस्टम अजगर उस खोज पथ को जोड़ देगा।
मेरे लिए यह काम किया जब मैंने .bash_profileफ़ाइल को बदल दिया । .bashrcकेवल फ़ाइल बदलने तक मैंने शेल को पुनरारंभ करने तक ही काम किया।
अजगर 2.7 के लिए यह इस तरह दिखना चाहिए:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
.bash_profileफ़ाइल के अंत में ।
export PYTHONPATH="${PYTHONPATH}:/my/other/path"अगर PYTHONPATHवर्तमान में मौजूद नहीं है (तो :) के कारण ~ / .bashrc में जोड़ना संभव नहीं है ।
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
ऊपर मेरे ~ / .bashrc में जोड़ने ने मेरे लिए Ubuntu 16.04 पर चाल चली
echo PYTHONPATHऔर कुछ नहीं दिखाया! इसका मतलब यह है कि इस PYTHONPATH को गलत नहीं किया गया है, इसलिए मैं सिर्फ इस लाइन export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detectionको अपनी ~/.bashrcफाइल में पेस्ट करता हूं source ~/.bashrc । बाद में, जब मैंने `इको $ PYTHONPATH` किया तो इसने मुझे दिया :<PATH_TO_TF>/TensorFlow/models/research/object_detection, यदि मैंने कुछ गलत किया है तो कोई सुझाव?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection, जब आप पहली बार PYTHONPATH को निर्यात कर रहे हैं, तो आपको इसे बिना ${PYTHONPATH}:भाग के करना होगा
:<PATH_TO_TF>/TensorFlow/models/research/object_detectionऔर 2 को हटा दिया है export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim। उस पर कोई सुझाव, इसे कैसे ठीक करें?
PYTHONPATH में एक नया पथ जोड़कर मैन्युअल रूप से कर रहा है:
टर्मिनल द्वारा अपने ~ / .bashrc प्रोफ़ाइल में पथ जोड़कर:
vim ~/.bashrc
अपनी प्रोफ़ाइल में निम्नलिखित पेस्ट करें
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
तब, जब आप कभी भी टर्मिनल में अपना कोड चलाते हैं, तो अपने bashrc प्रोफ़ाइल को स्रोत बनाना सुनिश्चित करें:
source ~/.bashrc
उम्मीद है की यह मदद करेगा।
मैंने स्थायी रूप से विंडोज विस्टा, पायथन 3.5 में जोड़ा
सिस्टम> नियंत्रण कक्ष> उन्नत प्रणाली सेटिंग्स> उन्नत (टैप) पर्यावरण चर> सिस्टम चर> (यदि आप चर कॉलम में PYTHONPATH नहीं देखते हैं) (क्लिक करें) नया> चर नाम: PYTHONPATH: परिवर्तनीय मूल्य:
कृपया, परिवर्तनीय मान में निर्देशिका लिखें। यह ब्लू पेपर के उत्तर का विवरण है।
नीचे दी गई स्क्रिप्ट सभी प्लेटफार्मों पर काम करती है क्योंकि यह शुद्ध पायथन है। यह पथ-संबंधी पथ का उपयोग करता है, यहाँ प्रलेखित https://docs.python.org/3/library/pathlib.html , इसे कार्य-मंच बनाने के लिए। आप इसे एक बार चलाते हैं, कर्नेल को पुनरारंभ करें और यह वह है। Https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574 से प्रेरित होकर ।
from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path
if str(to_add) not in path:
minLen=999999
for index,directory in enumerate(path):
if 'site-packages' in directory and len(directory)<=minLen:
minLen=len(directory)
stpi=index
pathSitePckgs=Path(path[stpi])
with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
pth_file.write(str(to_add))
यह इस थ्रेड के लिए एक अद्यतन है जिसके कुछ पुराने उत्तर हैं।
मैक-ओएस कैटालिना या कुछ नए (> = 10.15) का उपयोग करने वालों के लिए, इसे एक नया टर्मिनल नाम दिया गया था zsh(पुराने का विकल्प bash)।
मुझे इस बदलाव के कारण ऊपर दिए गए जवाबों से कुछ समस्याएँ थीं, और मैंने कुछ हद तक फ़ाइल बनाने ~/.zshrcऔर फ़ाइल निर्देशिका को फ़ाइल में चिपकाकर $PATHऔर$PYTHONPATH
तो, पहले मैंने किया:
nano ~/.zshrc
जब संपादक ने खोला तो मैंने निम्नलिखित सामग्री चिपकाई:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
इसे सहेजा, और टर्मिनल को पुनरारंभ किया।
महत्वपूर्ण: ऊपर का रास्ता मेरे कंप्यूटर के पथ पर सेट है, आपको इसे अपने अजगर के अनुकूल बनाना होगा।
अजगर 3.6.4 में आप इस तरह अजगर सत्र भर में sys.path जारी रख सकते हैं:
import sys
import os
print(str(sys.path))
dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")
root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")
sys.path.insert(0, root_dir)
print(str(sys.path))
मैं दृढ़ता से सुझाव देता हूं कि आप virtualenv और virtualenvwrapper का उपयोग करें अन्यथा आप अपने रास्ते को अव्यवस्थित करेंगे