Virtualenvs में टूटे हुए संदर्भ


238

मैंने हाल ही में अपने मैक पर कुछ अन्य अनुप्रयोगों के साथ डॉटफ़ाइल्स का एक गुच्छा स्थापित किया (मैं टर्मिनल के बजाय iTerm में बदल गया, और मेरे डिफ़ॉल्ट पाठ संपादक के रूप में उदात्त) लेकिन तब से, मेरे सभी आभासी वातावरणों ने काम करना बंद कर दिया है, हालांकि उनके फ़ोल्डर .virtenvs के अंदर हैं। अभी भी हैं और वे निम्नलिखित त्रुटि देते हैं जब भी मैं उनमें कुछ भी चलाने की कोशिश करता हूं:

dyld: Library not loaded: @executable_path/../.Python
  Referenced from: /Users/[user]/.virtualenvs/modclass/bin/python
  Reason: image not found
Trace/BPT trap: 5

मैंने डॉटफाइल्स से संबंधित सभी फाइलों को हटा दिया है और मेरी .bash_profile को पहले क्या है इसे बहाल कर दिया है, लेकिन समस्या बनी हुई है। क्या समस्या का निदान करने या इसे आसान तरीके से हल करने का कोई तरीका है (जैसे सभी को फिर से सभी वर्चुअन बनाने की आवश्यकता नहीं है)?


1
संभवतः संबंधित: debugfix.com/2011/11/dyld-library-loaded-executable_path-python
unutbu

टिप्पणी के लिए धन्यवाद, @unubtu। यह निश्चित रूप से सहायक है। लेकिन मैं कोई नया वर्चुअनल भी नहीं बना पा रहा हूं। मेरा rmvirtualenvअभी भी काम करता है, लेकिन जब चलाने की कोशिश कर mkvirtualenvरहा है, तो मुझे निम्नलिखित त्रुटि मिलती है: -bash: /usr/local/bin/virtualenv: /usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/Resour: bad interpreter: No such file or directory तो, यह मेरे अजगर पथों के साथ एक समस्या लगती है, लेकिन मैं नहीं देख सकता कि समस्या कहां है, क्योंकि मैं अजगर को चला सकता हूं और यह ठीक लगता है।
ऑक्सीट

1
[अद्यतन] मुझे समस्या मिल सकती है लेकिन मुझे यकीन नहीं है और मैं वास्तव में निश्चित नहीं हूं कि इसे कैसे ठीक किया जाए। ऐसा लगता है कि सभी virtualenvकमांड अब सिद्धांत रूप में काम कर रहे हैं, लेकिन चूंकि अजगर के साथ एक समस्या है, वे कुछ भी नहीं करते हैं। तो असली समस्या काढ़ा के अजगर के साथ है। और मुझे संदेह है कि इसका कारण अजगर निर्देशिकाओं में एक नाम परिवर्तन के कारण है। किसी कारण से, ये सभी कमांड फ़ोल्डर में अजगर की तलाश कर रहे हैं, /usr/local/Cellar/python/2.7.6लेकिन फ़ोल्डर का नाम वास्तव में है /usr/local/Cellar/python/2.7.6_1
ऑक्सीट

चूंकि मैं नौसिखिया हूं, मुझे नहीं पता कि 2.7.6_1 से 2.7.6 तक मैन्युअल रूप से नाम बदलना कितना खतरनाक है और देखें कि क्या होता है।
ऑक्सीट

आप का नाम बदलने के लिए सक्षम होना चाहिए 2.7.6_1करने के लिए 2.7.6। अगर बदतर सबसे बुरा आया, तो आप इसे वापस नाम दे सकते हैं।
unutbu

जवाबों:


369

मुझे यहाँ समस्या का हल मिल गया , इसलिए सारा श्रेय लेखक को जाता है।

जिस्ट यह है कि जब आप एक वर्चुअन बनाते हैं, तो होमबॉव स्थापित पायथन में कई सीमलिंक बनाए जाते हैं।

यहाँ एक उदाहरण है:

$ ls -la ~/.virtualenvs/my-virtual-env
...
lrwxr-xr-x  1 ryan staff   78 Jun 25 13:21 .Python -> /usr/local/Cellar/python/2.7.7/Frameworks/Python.framework/Versions/2.7/Python
...

जब आप होमब्रे का उपयोग करके पायथन को अपग्रेड करते हैं और फिर चलाते हैं brew cleanup, तो वर्चुअनव में सिम्लिंक्स उन रास्तों की ओर इशारा करते हैं जो अब मौजूद नहीं हैं (क्योंकि होमब्रे ने उन्हें हटा दिया)।

सिमिलिंक को नए स्थापित पायथन की ओर इशारा करने की आवश्यकता है:

lrwxr-xr-x  1 ryan staff   78 Jun 25 13:21 .Python -> /usr/local/Cellar/python/2.7.8_1/Frameworks/Python.framework/Versions/2.7/Python

समाधान virtualenv में symlinks को हटाने और फिर उन्हें फिर से बनाने के लिए है:

find ~/.virtualenvs/my-virtual-env/ -type l -delete
virtualenv ~/.virtualenvs/my-virtual-env

संभवतः यह जांचना सबसे अच्छा है कि उन्हें हटाने से पहले कौन से लिंक हटाए जाएंगे:

find ~/.virtualenvs/my-virtual-env/ -type l

मेरी राय में, केवल टूटी हुई सीलिंक को हटाना बेहतर है। आप इसे GNU का उपयोग करके कर सकते हैं find:

gfind ~/.virtualenvs/my-virtual-env/ -type l -xtype l -delete

findयदि आपके पास पहले से नहीं है, तो आप होमब्रे के साथ GNU स्थापित कर सकते हैं :

brew install findutils

ध्यान दें कि डिफ़ॉल्ट रूप से, होमबॉव के साथ स्थापित GNU प्रोग्राम अक्षर के साथ उपसर्ग करते हैं g। यह findबाइनरी को छाया देने से बचने के लिए है जो ओएस एक्स के साथ जहाज करता है।


4
+1 gfindएकदम सही था, क्योंकि मेरे पास बहुत सारे अटूट सिम्बलिंक थे (उदाहरण के लिए, नोडेनव) जिसे मैं हटाना नहीं चाहता था
2Toad

3
टूटे हुए find -L ~/.virtualenvs/my-virtual-env/ -type l | xargs rm
सीमलिंक

मैंने अपना संपूर्ण वर्चस्व dir हटा दिया। अब मैं सिम्लिंक नहीं हटा सकता। इस पृष्ठ पर वर्णित समाधानों में से कोई भी मेरे लिए मैक पर काम करता है। मुझे अभी भी वही त्रुटि मिली "छवि नहीं मिली। गर्भपात का जाल: 6"
असीम

ये कदम मेरे लिए काफी काम नहीं आया:pip3 freeze dyld: lazy symbol binding failed: Symbol not found: __Py_UnixMain
deed02392

1
बस जोड़ने के लिए, अगर env Python 2 के साथ था, इसे तर्क के साथ चलाएं: virtualenv ~/.virtualenvs/foo -p python2अन्यथा यह Python 3 का उपयोग करेगा।
Bohumir Zamecnik

41

कुछ चीजों की कोशिश करने के बाद, इसने मेरे लिए काम किया:

अपने virtualenv निर्देशिका पर जाएं (लेकिन वर्कऑन न चलाएं):

cd ~/.virtualenv/name_of_broken_venv

अब इन फ़ाइलों को हटा दें:

rm -rf .Python bin/python* lib/python2.7/* include/python2.7

फिर अपने वेनव को फिर से बनाना, चलाना:

virtualenv .
workon name_of_broken_venv
pip freeze

अब आपको फिर से अपने स्थापित पैकेजों की सूची देखनी चाहिए।


एफडब्ल्यूआईडब्ल्यू, मैंने अभी एल कैपिटान में अपग्रेड करने और होमब्रे को फिर से स्थापित करने के बाद इस दृष्टिकोण की कोशिश की, और मेरी पैकेज सूची संरक्षित नहीं थी।
रयान

1
पिपेनव के साथ आप कर pipenv --rmऔर फिर से बना सकते हैं pipenv shell,pipenv install
हैरी मोरेनो

14

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

हल करने के लिए, आपको उन रास्तों को अपडेट करना होगा जो वर्चुअल वातावरण इंगित करता है।

  • काढ़ा के साथ अजगर का एक संस्करण स्थापित करें:

brew install python

  • Virtualenvwrapper को पुनः स्थापित करें।

pip install --upgrade virtualenvwrapper

  • पुराने वर्चुअल वातावरण को हटाया:

rmvirtualenv old_project

  • एक नया आभासी वातावरण बनाएँ:

mkvirtualenv new_project

  • नए आभासी वातावरण पर काम करें

workon new_project

  • नई परियोजना के लिए आवश्यकताओं को स्थापित करने के लिए पाइप का उपयोग करें।

pip install -r requirements.txt

यह परियोजना को छोड़ देना चाहिए जैसा कि पहले था।


यह कुछ समय पहले था और मेरा मानना ​​है कि मैंने आखिरकार इन पंक्तियों के साथ कुछ किया था, लेकिन जब से मैंने 'पाइप फ्रीज> रिक्वायरमेंट्स' को नहीं चलाया था, तब यह सबसे कारगर उपाय नहीं था। सबक सीखा।
ऑक्सीटे

13

@Chris Wedgwoodरखने के लिए एक अद्यतन संस्करण का उत्तर site-packages(संकुल को स्थापित रखते हुए)

cd ~/.virtualenv/name_of_broken_venv


mv lib/python2.7/site-packages ./    
rm -rf .Python bin lib include
virtualenv .
rm -rf lib/python2.7/site-packages
mv ./site-packages lib/python2.7/

1
यह पूर्णता से परे है। सभी पैकेजों को बनाए रखते हुए अजगर संस्करण को स्थानांतरित करने में मदद करता है। यदि आप इसका अनुसरण कर रहे हैं, तो @ क्रिस वेगेवुड के निर्देशों पर अमल न करें।
हरीश प्रसन्ना

10

यह इस समस्या को हल करने का उचित तरीका है

 pip install --upgrade virtualenv

आपने होमब्रे के साथ अजगर को उन्नत किया है।

यह किसी भी सूत्र के लिए एक सामान्य प्रक्रिया होनी चाहिए जो अजगर की तरह कुछ स्थापित करती है, जिसमें इसकी खुद की पैकेज प्रबंधन प्रणाली है। जब आप स्थापित brew install pythonहै, तो आप को स्थापित करने pythonऔर pipऔर easy_installऔर virtualenvऔर इतने पर। इसलिए, यदि वे उपकरण स्व-अद्यतन किए जा सकते हैं, तो होमब्रे को समस्याओं के स्रोत के रूप में देखने से पहले ऐसा करने की कोशिश करना सबसे अच्छा है।


इसने सेटपूल के साथ एक मुद्दे के लिए काम किया, विशेष रूप से: चेतावनी: सेटपूल के लिए svn स्थान नहीं पा सकते हैं == 0.6c12dev-r88846
रॉबर्ट Brisita

1
मैंने इस समाधान को लागू किया, इसके बाद चल रहा है: virtualenv . मेरे टूटे आभासी वातावरण में। तब के अपडेट किए गए संस्करण virtualenvने आवश्यक निर्भरता को फिर से बनाया और मैं जाने के लिए अच्छा था। यह प्रक्रिया मेरे लिए स्वीकृत उत्तर की तुलना में अधिक स्व-प्रबंधित और मजबूत थी।
१५:१४

2020 में, यह अभी भी जवाब है।
scubabuddha

7

यदि यह brew upgradeइसकी पायथन अपग्रेड की गई वजह से था , और आप पिछले संस्करण में अपग्रेड करने के साथ ठीक हैं, तो कोशिश करें brew switch python [previous version], जैसे brew switch python 3.6.5यहां से।


4

virtualenvwrapper निर्देश

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

प्रत्येक वर्चुअल एनवी के लिए, आपको सही पाइथन पथ (काढ़ा सेल में) पर इंगित करने के लिए सीमलिंक को फिर से असाइन करने की आवश्यकता है। यह कैसे virtualenvwrapper के साथ करने के लिए है । यहाँ मैं "my-example-env" नामक एक आभासी env को अपडेट कर रहा हूँ।

cd ~/PYTHON_ENVS
find ./my-example-env -type l -delete
mkvirtualenv my-example-env

सब कुछ कर दिया।


4

जो कोई भी पिपेनव का उपयोग कर रहा है (और आपको चाहिए!) बस इन दोनों कमांड का उपयोग कर सकते हैं - बिना वेनव सक्रिय हुए:

rm -rf `pipenv --venv` # remove the broken venv
pipenv install --dev   # reinstall the venv from pipfile 

1
आप भी pipenv --rmअपने env के फ़ोल्डर में उपयोग कर सकते हैं और फिरpipenv install --dev
हैंडफिगर

2

यदि आपने python3 का भंडाफोड़ किया है तो बस कोशिश करें brew upgrade python3कि यह मेरे लिए तय हो।


2

मैंने हाल ही में इसका सामना किया। उपरोक्त किसी भी समाधान ने मेरे लिए काम नहीं किया। लगता है कि यह वास्तव में अजगर की समस्या नहीं थी। जब मैं भाग

aws s3 ls

रहा था तो मुझे निम्नलिखित त्रुटि हो रही थी:

dyld: Library not loaded: @executable_path/../.Python

इसका मतलब है, पुस्तकालय awsनिष्पादन योग्य की ओर इशारा कर रहा है या तो मौजूद नहीं है या भ्रष्ट है, इस प्रकार मैंने इस लिंकaws-cli से निर्देशों का पालन करते हुए अनइंस्टॉल किया और पुन: स्थापित किया और यह काम किया !!


2

मेरे लिए (एक MacOS उपयोगकर्ता) समस्या यह है कि brewपुराने संस्करण के लिए पायथन और वर्चुअनल लिंक को अपडेट किया गया था जिसे हटा दिया गया था।

हम इसे चेक करके ठीक कर सकते हैं

>> ls -al ~/.virtualenvs/<your-virtual-env>/.Python
.Python -> /usr/local/Cellar/python/<old-version>/Frameworks/Python.framework/Versions/3.7/Python
>> rm ~/.virtualenvs/<your-virtual-env>/.Python
>> ln -s  /usr/local/Cellar/python/<new-version>/Frameworks/Python.framework/Versions/3.7/Python ~/.virtualenvs/<your-virtual-env>/.Python

इसने Python3.6 वाले सिस्टम पर Python 3.7 को स्थापित करने के बाद टूटे हुए लिंक को ठीक करने का भी काम किया
lukik

2

मेरे पास एक समान मुद्दा था और मैंने इसे केवल आभासी वातावरण के पुनर्निर्माण के द्वारा हल किया virtualenv .


एसओ में आपका स्वागत है। यद्यपि हम आपके उत्तर के लिए धन्यवाद देते हैं, लेकिन बेहतर होगा यदि वह अन्य उत्तरों के शीर्ष पर अतिरिक्त मूल्य प्रदान करे। इस मामले में, आपका उत्तर अतिरिक्त मूल्य प्रदान नहीं करता है, क्योंकि कोई अन्य उपयोगकर्ता पहले से ही उस समाधान को पोस्ट करता है। यदि पिछला उत्तर आपके लिए मददगार था, तो आपको पर्याप्त प्रतिष्ठा होने के बाद उसे वोट देना चाहिए
डेविड बक

1

पायथन 2.7.10 का उपयोग करना।

एक एकल आदेश virtualenv path-to-envयह करता है। प्रलेखन

$ virtualenv path-to-env
Overwriting path-to-env/lib/python2.7/orig-prefix.txt with new content
New python executable in path-to-env/bin/python2.7
Also creating executable in path-to-env/bin/python
Installing setuptools, pip, wheel...done.

1

मेरे पास एक टूटी हुई आभासी एनवी थी, जो कि एक होमब्रेव पुनर्स्थापना के कारण अजगर (जिससे टूटी हुई सिम्बलिंक्स) थी और कुछ "सुडो पाइप इंस्टॉल" भी हुई थी, जो मैंने पहले किया था। वेइज़हॉन्ग की युक्तियां संकुल को फिर से स्थापित किए बिना मुद्दों को ठीक करने में बहुत मददगार थीं। मिश्रित अनुमतियों की समस्या के लिए मुझे निम्नलिखित कार्य भी करने थे।

sudo chown -R my_username lib / python2.7 / साइट-पैकेज


यदि आप किसी अन्य उपयोगकर्ता के उत्तरों को पूरक कर रहे हैं तो आपको उनके लिए एक टिप्पणी छोड़ देनी चाहिए ताकि वे संपादित कर सकें! अच्छा योगदान है।
फ्रांसिस्को पीटर्स

उसके पास उत्तर पर टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा बिंदु नहीं हैं।
टायलर स्मिथ

1

Virtualenvs टूट रहे हैं। कभी-कभी सरल तरीका है कि वेनव फ़ोल्डर्स को हटा दें और वायरललेनव को फिर से बनाएँ।


1

यदि आप पिपेनव का उपयोग कर रहे हैं, तो बस pipenv --rmसमस्या को हल करना है।


1

मैं अपने OSX कैटालिना पर काढ़ा अपग्रेड करने के बाद उसी मुद्दे का सामना कर रहा था।

सामानों के गुच्छा की कोशिश करने के बाद, मुझे लगता है कि निम्नलिखित सबसे अच्छा और आसान समाधान है।

सबसे पहले, वर्चुअल एनवी को डिलीट करें। (वैकल्पिक)

find myvirtualenv -type l -delete

फिर एक नया virtualenv पुनः बनाएँ

virtualenv myvirtualenv

संदर्भ: https://www.jeremycade.com/python/osx/homebrew/2015/03/02/fixing-virtualenv-after-a-python-upgrad/


0

स्वीकृत उत्तर मेरे लिए काम नहीं करता है: फ़ाइल $WORKON_HOME/*/bin/python2.7अब सिम्लिंक नहीं है, यह एक पूर्ण निष्पादन योग्य है:

$ file $WORKON_HOME/*/bin/python2.7
/Users/sds/.virtualenvs/.../bin/python2.7: Mach-O 64-bit executable x86_64
...

समाधान है, अफसोस, पूरी तरह से हटाने और सभी आभासी वातावरण को खरोंच से फिर से बनाने के लिए ।

संदर्भ के लिए:

deactivate
pip install --user virtualenv virtualenvwrapper
pip install --user --upgrade virtualenv virtualenvwrapper
for ve in $(lsvirtualenv -b); do
  # assume that each VE is associated with a project
  # and the project has the requirements.txt file
  project=$(cat $WORKON_HOME/$ve/.project)
  rmvirtualenv $ve
  mkvirtualenv -a $project -r requirements.txt $ve
done

मुझे लगता है कि यह इसलिए है क्योंकि यह समाधान अप्रचलित नहीं है - मैंने अभी इसकी कोशिश की है और इसने मेरे मुद्दे को ठीक कर दिया है। इसके अलावा, मुझे लगता है कि अगर आपके पास सहानुभूति नहीं है, तो आपको यहाँ वर्णित त्रुटि नहीं दिखाई देगी, इसलिए यह टिप्पणी एक समाधान नहीं बल्कि एक व्याकुलता बन जाती है - सिर्फ इसलिए कि आपके पास एक नया संस्करण है, इसका मतलब हर कोई नहीं करता है। यही कारण है कि मेरा अनुमान है कि नीचे की ओर :)
राफज़ज़

@ रफ़ाज़: मुझे आशा है कि अब यह बेहतर है। हालांकि, मुझे आश्चर्य है कि यह अभी भी आपके लिए एक सहानुभूति क्यों है। और हाँ, मुझे वह त्रुटि मिलती है क्योंकि virtualenv python स्टॉक python libs के खिलाफ जुड़ा हुआ है।
sds

मुझे लगता है कि डिफ़ॉल्ट व्यवहार अभी भी सहानुभूति बनाने के लिए है और आपको --always-copyइसे ओवरराइड करने के लिए एक तर्क की आवश्यकता है। कम से कम कि मुझे उपयोगकर्ता गाइड
रफज़ज़

@ रफ़ाज़: मैंने कभी उपयोग नहीं किया --always-copyऔर मेरे पास नियमित फाइलें हैं :-(
sds


0

मैंने शीर्ष कुछ तरीकों की कोशिश की, लेकिन उन्होंने मेरे लिए काम नहीं किया, जो विषाक्त काम करने की कोशिश कर रहे थे। आखिरकार क्या काम हुआ:

sudo pip install tox

यहां तक ​​कि अगर विषाक्त पहले से ही स्थापित किया गया था। उत्पादन के साथ समाप्त:

Successfully built filelock
Installing collected packages: py, pluggy, toml, filelock, tox
Successfully installed filelock-3.0.10 pluggy-0.11.0 py-1.8.0 toml-0.10.0 tox-3.9.0

0

यह मेरे लिए तय क्या सिर्फ python3 और pipenv की स्थापना रद्द कर रहा था फिर उन्हें पुनः स्थापित करना।

brew uninstall pipenv
brew uninstall python3
brew install python3 
brew install pipenv

0

सभी उत्तर यहां बहुत अच्छे हैं, मैंने रयान, क्रिस द्वारा उल्लिखित कुछ समाधानों की कोशिश की और इस मुद्दे को हल नहीं कर सका, इसलिए एक त्वरित और गंदे तरीके का पालन करना पड़ा।

  1. rm -rf <project dir>(या mv <project dir> <backup projct dir>यदि आप एक बैकअप रखना चाहते हैं)
  2. git clone <project git url>
  3. आगे बढ़ो!

यहां कुछ भी उपन्यास नहीं है, लेकिन यह जीवन को आसान बनाता है!


0

मुझे यकीन है कि मुझे पार्टी में देर हो गई है लेकिन मैं कहना चाहता हूं कि इस समस्या का समाधान यहां चर्चा करने की तुलना में बहुत सरल है।

आप कुछ भी हटाने / संपादित करने के बिना आसानी से आभासी वातावरण को पुन: उत्पन्न कर सकते हैं। यह मानते हुए कि आपके टूटे हुए वातावरण को env_to_fixआप निम्नलिखित के लिए कह सकते हैं:

mkvirtualenv env_to_fix

यह लिंक को पुन: उत्पन्न करेगा और वर्तमान स्थिति को डंप करने और इसे पुनर्स्थापित करने की आवश्यकता के बिना पर्यावरण को ठीक करेगा।


0

मैं उसी मुद्दे पर आया था जब मैं अपने मैक पर 2 से 3 बजे तक मेरे अजगर के चलने के समय को इंगित कर रहा था, और 3 रास्ते से अजगर को उर्फ ​​अजगर को इंगित कर रहा था। मैं फिर एक नया वर्चुअलाइव बनाता हूं और उन पैकेजों को फिर से स्थापित करता हूं जिनकी मुझे अपनी परियोजना के लिए आवश्यकता होती है। मेरे उपयोग के मामले में मेरे पास एक पायथन प्रोग्राम है जो गूगल शीट पर लिख रहा है। कुछ पैकेजों को साफ करें जो अजगर 2 कार्यान्वयन और वा ला से अलग हैं, चीजों ने फिर से काम करना शुरू कर दिया।

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