पायथन प्रमुख संस्करण के उन्नयन के बाद आभासी वातावरण में संकुल को स्वचालित रूप से पुनर्स्थापित करें


10

मुझे venvपायथन 3.6 के मॉड्यूल द्वारा बनाई गई मेरी डिस्क पर कई आभासी वातावरण (दर्जनों) पड़े हैं । अब मैंने जल्दबाजी में उबंटू 19.10 में अपग्रेड किया है और उसके बाद ही देखा कि 3.6 उबंटू 19.10 के लिए आम तौर पर स्वीकृत स्रोतों से बिल्कुल भी उपलब्ध नहीं है। मैं इन आभासी वातावरणों के पायथन संस्करणों को bin/python3अपने होम डाइरेक्टरी के अंतर्गत पता लगाने और python3.7 -mvenv --upgradeयुक्त फ़ोल्डर पर चलाने में कामयाब रहा हूँ ।

अब, python3.7 -mvenv --upgradeआभासी वातावरण में पायथन को अपग्रेड करते समय , यह मेरे पिछले पैकेज संस्करणों को उस के lib/python3.7/site-packagesतहत पुन: स्थापित करने के लिए कुछ नहीं करता है venv। मुझे लगता है कि मैंने पायथन 3.6 को स्थापित करके ऐसा किया हो सकता है, pip freezeसे आवश्यकताओं venvको निगलना और फिर वेव को पायथन में अपग्रेड करना 3.7, pip install -rआईएनजी - यदि केवल मेरे नए ओएस के लिए पायथन 3.6 स्थापित उपलब्ध था।

क्या कोई और तरीका है, बल्कि एक स्वचालित तरीके से (शायद मुख्य रूप से pip freezeपुरानी lib/python3.6निर्देशिका का उपयोग करके ) मेरे बिना पायथन 3.6 को स्रोत से स्थापित करने के लिए, कोंडा का उपयोग करके या कुछ यादृच्छिक PPA से 3.6 स्थापित करने का कोई अन्य तरीका है ? मैं सभी वातावरण को अपग्रेड करना चाहता हूं ताकि भविष्य में जब मुझे एक यादृच्छिक वातावरण के साथ कुछ करने की आवश्यकता हो तो यह पायनियर 3.7 के साथ काम करना जारी रखे।

जवाबों:


11

आपके नए 3.7 वेव में आपको pkg_resourcesउपलब्ध होना चाहिए - setuptoolsनिर्मित होने पर स्वचालित रूप से स्थापित होता है। यदि नहीं, तो बस pip install setuptools

setuptoolsपुस्तकालय कोड वास्तव में काम pipकरने के लिए क्या प्रतिशोध है pip freeze। लेकिन आप इसे मैन्युअल रूप से फ्रीज कर सकते हैं।

# in 3.7 runtime...
import pkg_resources
old_site_dir = ".venv/lib/python3.6/site-packages/"
working_set = pkg_resources.WorkingSet([old_site_dir])
for dist in working_set:
    print(dist.as_requirement())

आप उस आउटपुट को एक requirements.txtफ़ाइल में फेंक सकते हैं और संभवत: एक काम कर रहे साइट को फिर से संगठित कर सकते हैं, कोई python3.6रनटाइम की आवश्यकता नहीं है।

ध्यान दें कि यह विधि 100% मूर्ख नहीं हो सकती है, क्योंकि परियोजनाओं के लिए अपने वितरण मेटाडेटा में पर्यावरण मार्करों का उपयोग करके अजगर 3.6.6 और अजगर 3.7 के लिए अलग-अलग निर्भरता वाले पेड़ों की घोषणा करना संभव है ( पीईपी 508 देखें )। यह भी संभव है कि आपके 3.6 साइट में स्थापित आइटम 3.7 का समर्थन नहीं करते सब पर । हालाँकि यह देखना बहुत ही असामान्य बात है कि 3.6 और 3.7 के बीच एक मामूली संस्करण में टक्कर होती है, इसलिए केवल काम करने वाले सेट का उपयोग करना अभ्यास में "अच्छा पर्याप्त" होना चाहिए।


"अच्छा पर्याप्त" है इस मामले में काफी अच्छा। बल्क काम हो जाने के बाद यहां और वहां के विषम मॉड्यूल को अपडेट करने में कोई समस्या नहीं है।
अंती हापला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.