अपने वैश्विक साइट-संकुल से virtualenv को विशिष्ट संकुल बनाएँ


208

मैं एक virtualenv बनाने के लिए एक रास्ता खोज रहा हूं जिसमें आधार अजगर स्थापना के बस कुछ पुस्तकालय (जो मैंने चुना) शामिल होंगे।

अधिक ठोस होने के लिए, मैं virtualenv के निर्माण के दौरान अपने matplotlib को virtualenv में आयात करने की कोशिश कर रहा हूं। यह कुशलतापूर्वक पाइप या easy_install के साथ स्थापित नहीं किया जा सकता है क्योंकि यह कुछ फोरट्रान संकलक के कामों को याद करता है। जिस तरह से मैंने अब तक यह किया था वह मैन्युअल रूप से कॉपी करना था

/usr/lib/python2.7/dist-packages/ to virtualenv_name/lib/python2.7/dist-packages/

हालाँकि, यह जर्दी द्वारा रजिस्टर किए जाने वाले आयातित आयातित लिंक को रोकता है (जो वर्चुअन में सभी वर्तमान में उपलब्ध लिबास को प्रिंट करता है)।

तो, वहाँ एक चयनात्मक संस्करण करने का एक तरीका है

virtualenv --system-site-packages

16
एक कोमल अनुस्मारक - कृपया नीचे दिए गए कार्यों में से एक प्रकट होने पर उत्तर का चयन करें।
फोब्बरबेक्यू

1
ऐसा लगता है कि पिछले कुछ महीनों में 12 लोगों ने आपके लिए परीक्षण किया है ...
फोब्बरबेक्यू

2
ओपी को पेस्टर क्यों करें? हम सब देख सकते हैं कि सबसे लोकप्रिय उत्तर कौन सा है; क्या यह वास्तव में मायने रखता है कि क्या वह इसे स्वीकार करता है? मुझे लगता है कि खुद के लिए परीक्षण में उनकी ईमानदारी, सबसे लोकप्रिय जवाब को टिक करने के बजाय, प्रशंसा की जानी चाहिए।
माइकल स्काइपर

5
2013: सही और गलत उत्तरों के बीच उत्तर स्कोर बहुत समान हैं। ओपी का कहना है कि वह परीक्षण करेगा। 2016: माइकल शेपर इतने प्रभावित हुए कि ओपी (तीन साल पहले) ने कहा कि परीक्षण करेंगे। 2017: मैं फिर से इस सवाल पर आता हूं और खुश हूं।
फोब्बरबेक्यू

2
कोई सही उत्तर नहीं है। ओपी ने सेलेक्टिव के लिए कहा --system-site-packages। उत्तर गैर-चयनात्मक का उपयोग करने का सुझाव देते हैं --system-site-packagesऔर फिर कुछ संकुल को स्थानीय रूप से स्थापित करते हैं, जो अलग है और इसके अलग-अलग निहितार्थ हैं।
पियोत्र जर्कविक्ज़

जवाबों:


238

पर्यावरण के साथ बनाएँ virtualenv --system-site-packages। फिर, virtualenv को सक्रिय करें और जब आप सिस्टम python, उपयोग pip install --ignore-installedया के बजाय virtualenv में स्थापित चीजें चाहते हैं pip install -I। इस तरह से पाइप स्थापित हो जाएगा जो आपने स्थानीय रूप से अनुरोध किया है, भले ही सिस्टम-वाइड संस्करण मौजूद हो। आपका अजगर दुभाषिया पहले virtualenv के पैकेज निर्देशिका में दिखेगा, इसलिए उन पैकेजों को वैश्विक लोगों को छाया देना चाहिए।


45
-I का उपयोग करके, आप हमेशा पैकेज को फिर से इंस्टॉल करेंगे, भले ही वे पहले से ही सिस्टमवाइड साइट-पैकेज डायरेक्टरी में मौजूद हों। यदि आप इसके बजाय -U का उपयोग करते हैं, तो यह आपके virtualenv में नए संस्करणों के पैकेज स्थापित करेगा, लेकिन सिस्टम में पहले से उपलब्ध किसी भी पैकेज को आवश्यक संस्करण के साथ पुनर्स्थापित नहीं करेगा।
डैनिलो बार्गेन

15
क्या आप जानते हैं कि पहले से निर्मित आभासी वातावरण पर'- theystem- साइट-संकुल विकल्प 'को सक्रिय करने का कोई तरीका है? मैं अपने सभी स्थानीय पैकेजों को पुनः स्थापित करने की परेशानी से बचना पसंद करूंगा!
गेब्रियल


मुझे यह जवाब बहुत दिलचस्प लगा, हालाँकि मेरे पास एक बहुत ही अजीब मामला था जहाँ यह काम नहीं करता था। मैं no-global-site-packagesसक्षम के साथ एक virtualenv है । लेकिन किसी कारण से मुझे नहीं पता कि एक पैकेज था जो वैश्विक प्रणाली से उपयोग किया जा रहा था। pip install -IVirtualenv के अंदर से पैकेज के लिए उपयोग करने से काम नहीं चला। मैंने आखिरकार virtualenv और ग्लोबल सिस्टम से अस्थायी रूप से पैकेज को अनइंस्टॉल करना समाप्त कर दिया, फिर मैं इसे virtualenv और सिस्टम में (उस क्रम में) वापस स्थापित कर सकता था। तो अब यह ठीक काम करता है।
kstenger

3
-1 प्रश्न निश्चित पैकेज बनाने के लिए कहता है , छायांकित पैकेजों को छोड़कर सभी को नहीं । एक सीमित सेट को सफेद करने से सब कुछ सफेद करने की तुलना में अधिक सुरक्षित होगा क्योंकि यह गारंटी देता है कि सभी पैकेजों में स्पष्ट रूप से श्वेतसूची वाले को छोड़कर वेव में मौजूद होना चाहिए।
bluenote10

19

आप --system-site-packagesअपने virtualenv के लिए विशिष्ट सामान को "और फिर" ओवरइंस्टॉल कर सकते हैं । इस तरह, आप अपने virtualenv में जो कुछ भी इंस्टॉल करते हैं, वहीं से लिया जाएगा, अन्यथा यह आपके सिस्टम से लिया जाएगा।


मैं बिल्कुल निश्चित नहीं हूं कि अस्पष्ट क्या है, लेकिन कोशिश करेंगे: यदि आप --system-site-package विकल्प के साथ एक virtualenv बनाते हैं, तो सिस्टम पहले आपके virtualenv में संकुल खोजने की कोशिश करेगा, अगर यह वहां नहीं मिलता है, तो यह होगा अपने सिस्टम अजगर स्थापना में इसे खोजने का प्रयास करें। केवल अगर यह वहाँ भी नहीं मिलता है, तो यह बढ़ाएगा और आयात करेगा।
स्कैची

4
इस दृष्टिकोण के साथ एकमात्र समस्या यह है कि अब आपके पास सभी सिस्टम लाइब्रेरी हैं। जहाँ आप स्थापित हैं पर बहुत कड़ा नियंत्रण चाहते हैं।
ड्वेन

7
यह स्पष्ट नहीं है कि यह वास्तव में कैसे संभव है! यदि आप myprog के साथ बनाए गए virtualenv में पाइप इंस्टाल करते हैं - जहाँ सिस्टम में myprog मौजूद है, तो यह सिस्टम को "overinstall" नहीं करेगा। यह सिर्फ यह पाएगा कि myprog मौजूद है, और कहें "आवश्यकता पहले से ही संतुष्ट है।" तो ... तुम्हारा क्या मतलब था?
फ़ोबोबार्ब्यू


-7

आप उपयोग कर सकते हैं virtualenv --clear। जो किसी भी पैकेज को स्थापित नहीं करेगा, फिर आप जो चाहें स्थापित करें।


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