virtualenv-no- साइट-संकुल और पाइप अभी भी वैश्विक पैकेज ढूंढ रहे हैं?


136

मैं इस धारणा के तहत था कि virtualenv --no-site-packagesपायथन पर्यावरण को पूरी तरह से अलग और पृथक बना देगा, लेकिन ऐसा नहीं लगता।

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

$ virtualenv --no-site-packages foo       
New python executable in foo/bin/python
Installing setuptools............done.
$ pip -E foo install Django
Requirement already satisfied: Django in /usr/share/pyshared
Installing collected packages: Django
Successfully installed Django

जो मैं बता सकता हूं, pip -E foo installउससे ऊपर को Django के एक नए संस्करण को फिर से स्थापित करना है। इसके अलावा, अगर मैं पर्यावरण को स्थिर करने के लिए पाइप बताता हूं, तो मुझे बहुत सारे पैकेज मिलते हैं। मुझे उम्मीद है कि इसके साथ एक ताजा वातावरण के --no-site-packagesलिए खाली हो जाएगा?

$ pip -E foo freeze
4Suite-XML==1.0.2
BeautifulSoup==3.1.0.1
Brlapi==0.5.3
BzrTools==1.17.0
Django==1.1
... and so on ...

क्या मुझे गलतफहमी --no-site-packagesहै कि काम कैसे करना चाहिए?


4
FYI करें, - कोई साइट-पैकेज नहीं बने। यहां देखें
सलेम बेन मबोरक

@SalemBenMabrouk लिंक टूटा, यहाँ नया लिंक जीथब पर संबंधित मुद्दा: क्या हाल ही में '-नो-साइट-पैकेज' ध्वज गायब हो गया?
यन्जक्सजम्

उस लिंक में, यह कहते हैं --no-site-packagesकि डीप्रीकेटेड है। केवल पिछड़ी अनुकूलता के लिए रिटेन किया गया। वैश्विक साइट-संकुल तक पहुँच नहीं होना अब डिफ़ॉल्ट व्यवहार है । यदि आप वैश्विक साइट-संकुल तक पहुँचना चाहते हैं, तो आप सक्षम कर सकते हैं --system-site-packages
यन्जक्सजम्

जवाबों:


107

मुझे इस तरह की एक समस्या थी, जब तक मुझे एहसास नहीं हुआ कि (जब तक मैंने वर्चुअन की खोज की थी) से पहले, मैं अपनी .bashrc फ़ाइल में PYTHONPATH में निर्देशिकाओं को जोड़ने गया था। जैसा कि एक साल पहले हो चुका था, मैंने सीधे तौर पर ऐसा नहीं सोचा था।


12
मेरे हीरो! यदि आप बस यह जांचना चाहते हैं कि क्या आपका मुद्दा वास्तव में जल्दी है, तो आप प्रिंटेनव को यह देखने के लिए चला सकते हैं कि क्या PYTHONPATH है, और यदि यह है, तो परेशान PYTHONPATH चलाएं। यदि आप समस्या को अब और पॉप अप नहीं करना चाहते हैं, तो आपको अभी भी समस्या का ट्रैक करना होगा, लेकिन यह आपको वर्तमान शेल सत्र में सेट किए गए नए वर्चुअन को प्राप्त करने देगा।
अल्ट्राबेक

Homebrew यह भी करता है!
रोब

1
काश मैं तुम्हें और बढ़ा सकता। मैं इस पेज पर एक से अधिक बार सामानों के आने के बाद आया हूं जो कि मेरे PYTHONPATH के सेट होने के कारण था।
बेमू जूल

मुझे पता है कि यह वास्तव में (वास्तव में) पुरानी पोस्ट है, लेकिन मैंने हर जगह खोज की है, जिसमें एसओ पर अपने स्वयं के कुछ प्रश्न पूछना शामिल है, और मैं यह पता नहीं लगा सकता कि --no-site-packagesकाम कैसे करना है। मैं सिर्फ उबंटू को पोंछने के करीब पहुंच रहा हूं और यह देख रहा हूं कि क्या चीजें ठीक होती हैं। मैंने शुरू में सोचा कि मुझे वही PYTHONPATH समस्या हो रही है, लेकिन दौड़ने पर printenv, मैं इसे नहीं देख सकता। निराशा बढ़ रही है, और किसी भी मदद की बहुत सराहना की जाती है। मेरे sys.path के अंदर बनाए गए वेनव के साथ --no-site-packagesमेरे सभी पैकेज निर्देशिकाओं को शामिल करना प्रतीत होता है। मैं इस कैसे संशोधित करने के लिए foggiest नहीं है। मदद?
NotAnAmbiTurner

यह आपके वैश्विक PATHवैरिएबल पर भी लागू हो सकता है यदि आप वर्चुअलाइज के बाहर से भी निष्पादनयोग्य पा रहे हैं।
एंडरलैंड

27

आपको यह सुनिश्चित करना होगा कि आप pipवर्चुअल वातावरण में बाइनरी चला रहे हैं , वैश्विक नहीं।

env/bin/pip freeze

एक परीक्षण देखें:

हम --no-site-packagesविकल्प के साथ virtualenv बनाते हैं :

$ virtualenv --no-site-packages -p /usr/local/bin/python mytest
Running virtualenv with interpreter /usr/local/bin/python
New python executable in mytest/bin/python
Installing setuptools, pip, wheel...done.

हम freezeनए बनाए गए से आउटपुट की जांच करते हैं pip:

$ mytest/bin/pip freeze
argparse==1.3.0
wheel==0.24.0

लेकिन अगर हम वैश्विक उपयोग करते हैं, तो pipहमें यही मिलता है:

$ pip freeze
...
pyxdg==0.25
...
range==1.0.0
...
virtualenv==13.1.2

यही है, pipपूरे सिस्टम में स्थापित किए गए सभी पैकेज । जाँच करने से which pipहमें (कम से कम मेरे मामले में) कुछ ऐसा मिलता है /usr/local/bin/pip, जिसका अर्थ है कि जब हम ऐसा करते हैं तो pip freezeइसके बजाय इस बाइनरी को बुला रहे हैं mytest/bin/pip


मुझे भी यही समस्या थी। मुझे आश्चर्य है कि यह कैसे हुआ, क्योंकि पहले कॉलिंग में पाइप फ्रीज ने मुझे सही पैकेज दिखाए थे, लेकिन कुछ दिनों बाद इसने / usr / लोकल / बिन / ... पर स्थित कॉल करना शुरू कर दिया
jimijazz

1
यह मेरे लिए मुद्दा था: मैंने pipवैश्विक पाइप के लिए एक विशिष्ट पथ के लिए उपनाम दिया था, जो वर्चुअन को सक्रिय करते समय ओवरराइड नहीं किया जा रहा था।
मेरिलएनडीएस

1
आपने अभी मुझे बचाया है, इसने मेरे लिए अच्छा काम किया (pip3 & python3.7) धन्यवाद
यूसेफ

24

आखिरकार मैंने पाया कि, जो भी कारण, पाइप-ई काम नहीं कर रहा था। हालाँकि, अगर मैं वास्तव में virtualenv को सक्रिय करता हूं, और पाइप को स्थापित करने के लिए virtualenv द्वारा दिए गए easy_install का उपयोग करता हूं, तो पाइप को सीधे भीतर से उपयोग करें, यह अपेक्षा के अनुरूप काम करता है और केवल virtualenv में संकुल दिखाता है


2
FWIW, पाइप के वर्तमान ट्रंक संस्करणों के साथ और अपने मूल वर्कफ़्लो को virtualenv अब सही काम करता है, मेरे लिए वैसे भी। उस ने कहा, मैं व्यक्तिगत रूप से अभी भी बचने के लिए -E और बस प्रत्येक virtualenv में पाइप स्थापित करें।
कार्ल मेयर

17

मुझे पता है कि यह एक बहुत पुराना सवाल है, लेकिन इसका समाधान खोजने के लिए यहां पहुंचने वालों के लिए:

चलने से पहले virtualenv ( source bin/activate) को सक्रिय करना न भूलें pip freeze। अन्यथा आपको सभी वैश्विक पैकेजों की एक सूची मिल जाएगी।


इसके लिए बहुत बहुत धन्यवाद, मुझे पता था कि मुझे virtualenv के साथ स्रोत का उपयोग करना था, लेकिन virtualenvwrapper के लिए नहीं और मैंने कभी पाइप फ्रीज के बारे में नहीं सुना। फिर से धन्यवाद
निर्भर

सही उत्तर। virtualenv को इनिशियलाइज़ करने के बाद आपको इसे सक्रिय करना होगा या आप अजगर के सिस्टम संस्करण का उपयोग कर रहे होंगे
AsAP_Sherb

16

के PYTHONPATHसाथ अस्थायी रूप से साफ़ करें :

export PYTHONPATH=

फिर वर्चुअल वातावरण बनाएं और सक्रिय करें:

virtualenv foo
. foo/bin/activate

तभी ही:

pip freeze

15

--no-site-packagesजैसा कि नाम से पता चलता है, मानक साइट-संकुल निर्देशिका को हटा देना चाहिए sys.path। कुछ और जो मानक पायथन पथ में रहता है, वहीं रहेगा।


1
मेरे लिए मेरी सफाई के PYTHONPATHसाथ export PYTHONPATH=चाल करने के लिए लग रहा था।
जुनिपर-

4

विंडोज पर एक समान समस्या हो सकती है यदि आप स्क्रिप्ट को सीधे कहते हैं script.pyजिसके बाद विंडोज डिफ़ॉल्ट ओपनर का उपयोग करता है और वर्चुअल वातावरण के बाहर पायथन को खोलता है। इसे कॉल python script.pyकरने से पायथन का उपयोग आभासी वातावरण के साथ होगा।


स्क्रिप्ट के शीर्ष पर एक शबंग रेखा होनी चाहिए ('! #' के साथ भीख) जो व्याख्या की गई ई की ओर इशारा करती है।
wobbily_col 12

2

यह तब भी प्रतीत होता है जब आप virtualenv निर्देशिका को किसी अन्य निर्देशिका (लिनक्स पर) में स्थानांतरित करते हैं, या एक मूल निर्देशिका का नाम बदल देते हैं।


1

मुझे भी यही समस्या हो रही थी। मेरे लिए (उबंटू पर) मुद्दा यह था कि मेरा पथ नाम निहित था $। जब मैंने $ dir के बाहर एक virtualenv बनाया, तो यह ठीक काम किया।

अजीब।


1

Virtualenv pip काम नहीं करेगा संभावित कारणों में से एक यह है कि यदि किसी भी मूल फ़ोल्डर में इसके नाम में जगह है तो समस्या /Documents/project name/app को /Documents/projectName/appहल करने के लिए इसका नाम बदल दिया जाएगा ।


1

मैं उसी समस्या के पार आया, जहां वेनव में पाइप अभी भी ग्लोबल पाइप का काम करता है।
कई पृष्ठों को खोजने के बाद, मैं इसे इस तरह से समझ रहा हूं।
1. विकल्प के साथ virtualenv द्वारा एक नया venv बनाएँ "-no-site-package"

virtualenv --no-site-packages --python=/xx/xx/bin/python my_env_nmae

कृपया ध्यान दें कि हालांकि "-no-site-package" विकल्प डिफॉल्ट सच था 1.7.1 के बाद से virtualenv की doc फाइल में, लेकिन मैंने पाया कि जब तक आप इसे मैन्युअल रूप से सेट नहीं करते तब तक यह काम नहीं करता। शुद्ध वेनव प्राप्त करने के लिए, मैं दृढ़ता से इस विकल्प को चालू करने का सुझाव देता हूं। आपके द्वारा बनाए गए नए एनवी को सक्रिय करें

source ./my_env_name/bin/activate
  1. अपने पाइप स्थान और अजगर स्थान की जाँच करें और सुनिश्चित करें कि ये दोनों कमांड वर्चुअल एनवायरमेंट के तहत हैं
pip --version
which python
  1. वैश्विक पैकेज इंटरप्टन से मुक्त पैकेज स्थापित करने के लिए वर्चुअल एनवी के तहत पाइप का उपयोग करें
pip install package_name

काश यह उत्तर आपकी मदद करे!


0

यहां सभी पाइप इंस्टॉल विकल्पों की सूची दी गई है - मुझे कोई ' -E' विकल्प नहीं मिला , पुराने संस्करण में यह हो सकता है। नीचे मैं एक सादा अंग्रेजी उपयोग और virtualenvआगामी SO उपयोगकर्ताओं के लिए काम कर रहा हूँ ।


हर बात ठीक लगती है, सक्रिय होना स्वीकार करें virtualenv(foo ) । यह सब हमें कई (और अलग-अलग) पायथन पर्यावरण अर्थात विभिन्न पायथन संस्करणों, या विभिन्न Django संस्करणों, या किसी भी अन्य पायथन पैकेज की अनुमति देता है - अगर हमारे पास उत्पादन में पिछला संस्करण है और हमारे साथ नवीनतम Djit रिलीज का परीक्षण करना चाहते हैं। आवेदन।

वर्चुअल वातावरण को कम बनाने और उपयोग करने (सक्रिय करने) में virtualenvविभिन्न पायथन इंटरप्रेटर अर्थात पायथन 2.7 और 3.3 के साथ हमारे एप्लिकेशन या सरल पायथन स्क्रिप्ट को चलाना या परीक्षण करना संभव बनाता है - --no-site-packagesमौजूदा से नए इंस्टॉलेशन ( विकल्प का उपयोग करके ) या सभी पैकेज हो सकते हैं। / अंतिम सेटअप ( --system-site-packagesविकल्प का उपयोग करके )। इसका उपयोग करने के लिए हमें इसे सक्रिय करना होगा:

$ pip install django इसे वैश्विक साइट-पैकेजों में स्थापित करेगा, और इसी तरह से pip freeze वैश्विक साइट-संकुल के नाम देगा।

जबकि venv dir (foo) को क्रियान्वित करने $ source /bin/activateसे venv सक्रिय हो जाएगा अर्थात अब pip के साथ कुछ भी स्थापित किया जाएगा केवल वर्चुअल env में स्थापित किया जाएगा, और केवल अब pip freeze वैश्विक साइट-संकुल python संकुल की सूची नहीं देगा। एक बार सक्रिय होने के बाद:

$ virtualenv --no-site-packages foo       
New python executable in foo/bin/python
Installing setuptools............done.
$ cd foo
$ source bin/activate 
(foo)$ pip install django

(foo)इससे पहले कि $संकेत इंगित करता है कि हम एक आभासी अजगर पर्यावरण का उपयोग कर रहे हैं अर्थात पाइप के साथ कोई भी चीज - इंस्टॉल, फ्रीज, अनइंस्टॉल इस वेनव तक सीमित होगी, और वैश्विक / डिफ़ॉल्ट पायथन इंस्टॉलेशन / पैकेज पर कोई प्रभाव नहीं पड़ेगा।

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