मैं विभिन्न virtualenv वातावरण में एक ही पैकेज का एक बहुत स्थापित करते हैं। क्या कोई तरीका है कि मैं एक बार पैकेज डाउनलोड कर सकता हूं और फिर स्थानीय कैश से पाइप स्थापित कर सकता हूं ?
यह डाउनलोड बैंडविड्थ और समय को कम करेगा।
मैं विभिन्न virtualenv वातावरण में एक ही पैकेज का एक बहुत स्थापित करते हैं। क्या कोई तरीका है कि मैं एक बार पैकेज डाउनलोड कर सकता हूं और फिर स्थानीय कैश से पाइप स्थापित कर सकता हूं ?
यह डाउनलोड बैंडविड्थ और समय को कम करेगा।
जवाबों:
पिप प्रलेखन के अनुसार :
V6.0 के साथ शुरू, पाइप डिफ़ॉल्ट कैश पर एक प्रदान करता है जो वेब ब्राउज़र के समान कार्य करता है। जबकि कैश डिफ़ॉल्ट रूप से चालू है और सही तरीके से डिज़ाइन किया गया है, तो आप कैश को अक्षम कर सकते हैं और
--no-cache-dirविकल्प का उपयोग करके हमेशा PyPI तक पहुंच सकते हैं ।
इसलिए, यदि आप डाउनलोड कैश चाहते हैं, तो अपडेट किया गया उत्तर केवल अपनी चूक के साथ पाइप का उपयोग करना है।
से पिप खबर , संस्करण 0.1.4:
एक पर्यावरणीय चर $ PIP_DOWNLOAD_CACHE के लिए समर्थन जोड़ा गया है जो संकुल डाउनलोड को कैश करेगा, इसलिए भविष्य के प्रतिष्ठानों को बड़े डाउनलोड की आवश्यकता नहीं होगी। नेटवर्क का उपयोग अभी भी आवश्यक है, लेकिन इसका उपयोग करते समय कुछ डाउनलोड से बचा जाएगा।
इसका लाभ उठाने के लिए, मैंने निम्नलिखित को अपने साथ जोड़ा है ~/.bash_profile:
export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache
या, यदि आप एक मैक पर हैं:
export PIP_DOWNLOAD_CACHE=$HOME/Library/Caches/pip-downloads
PIP_DOWNLOAD_CACHEडायरेक्टरी में जोड़ा जाएगा । उदाहरण के लिए, मेरे पास अब बहुत सारे Django पैकेज हैं।virtualenvsहवाई जहाज पर नया निर्माण करने के लिए जवाब नहीं है , लेकिन फिर भी महान है।मेरी राय में, pip2piइस समस्या का एक बहुत अधिक सुरुचिपूर्ण और विश्वसनीय समाधान है।
डॉक्स से:
pip2pi पाइप आवश्यकताओं से PyPI- संगत पैकेज भंडार बनाता है
pip2pi आपको दो सरल आदेशों का उपयोग करके अपना स्वयं का PyPI इंडेक्स बनाने की अनुमति देता है:
पैकेज और उसकी सभी आवश्यकताओं को पूरा करने के लिए, उपयोग करें pip2tgz:
$ cd /tmp/; mkdir package/
$ pip2tgz packages/ httpie==0.2
...
$ ls packages/
Pygments-1.5.tar.gz
httpie-0.2.0.tar.gz
requests-0.14.0.tar.gz
पिछली निर्देशिका से पैकेज इंडेक्स बनाने के लिए:
$ ls packages/
bar-0.8.tar.gz
baz-0.3.tar.gz
foo-1.2.tar.gz
$ dir2pi packages/
$ find packages/
/httpie-0.2.0.tar.gz
/Pygments-1.5.tar.gz
/requests-0.14.0.tar.gz
/simple
/simple/httpie
/simple/httpie/httpie-0.2.0.tar.gz
/simple/Pygments
/simple/Pygments/Pygments-1.5.tar.gz
/simple/requests
/simple/requests/requests-0.14.0.tar.gz
आपके द्वारा चरण 2 में निर्मित सूचकांक से स्थापित करने के लिए, आप बस उपयोग कर सकते हैं:
pip install --index-url=file:///tmp/packages/simple/ httpie==0.2
तुम भी एक दूरस्थ मेजबान के साथ अपने खुद के सूचकांक दर्पण कर सकते हैं pip2pi।
pip2tgzपता लगाता है कि क्या आपने पहले से ही निर्दिष्ट निर्देशिका में पैकेज डाउनलोड किया है, इसलिए यदि आप एक ही इंस्टॉल लाइन या कई स्थापित लाइनें चलाते हैं जिनमें अतिव्यापी निर्भरताएं हैं, तो यह केवल प्रत्येक पैकेज को एक बार डाउनलोड करेगा।
नए पिप संस्करण अब डिफ़ॉल्ट रूप से डाउनलोड करते हैं। देखें यह दस्तावेज:
https://pip.pypa.io/en/stable/reference/pip_install/#caching
नाम की एक कॉन्फ़िगरेशन फ़ाइल बनाएं ~/.pip/pip.conf, और निम्नलिखित सामग्री जोड़ें:
[global]
download_cache = ~/.cache/pip
ओएस एक्स पर, चुनने का एक बेहतर तरीका होगा ~/Library/Caches/pipक्योंकि यह सम्मेलन के अन्य ओएस एक्स कार्यक्रमों का उपयोग करता है।
pip.confएक download_cacheसेटिंग है जो समान सिस्टम-वाइड निर्देशिका को इंगित करता है।
PIP_DOWNLOAD_CACHE में कुछ गंभीर समस्याएं हैं। सबसे महत्वपूर्ण बात, यह कैश में डाउनलोड के होस्टनाम को एन्कोड करता है, इसलिए दर्पण का उपयोग करना असंभव हो जाता है।
पाइप डाउनलोड के कैश को प्रबंधित करने का बेहतर तरीका "पैकेज डाउनलोड करें" कदम को "पैकेज स्थापित करें" चरण से अलग करना है। डाउनलोड की गई फ़ाइलों को आमतौर पर "sdist files" (स्रोत वितरण) के रूप में संदर्भित किया जाता है और मैं उन्हें एक निर्देशिका $ SDIST_CACHE में संग्रहीत करने जा रहा हूं।
दो चरणों को समाप्त किया जा रहा है:
pip install --no-install --use-mirrors -I --download=$SDIST_CACHE <package name>
जो पैकेज को डाउनलोड करेगा और $ SDIST_CACHE द्वारा बताई गई निर्देशिका में रखेगा। यह पैकेज स्थापित नहीं करेगा। और फिर आप चलाते हैं:
pip install --find-links=file://$SDIST_CACHE --no-index --index-url=file:///dev/null <package name>
पैकेज को अपने आभासी वातावरण में स्थापित करने के लिए। आदर्श रूप से, $ SDIST_CACHE आपके स्रोत नियंत्रण के तहत प्रतिबद्ध होगा। उत्पादन के लिए तैनात करते समय, आप उन्हें डाउनलोड किए बिना पैकेज स्थापित करने के लिए केवल दूसरी पाइप कमांड चलाएंगे।
6.0 संस्करण में शुरू , pipअब यह खुद कैशिंग है:
- DEPRECATION
pip install --download-cacheऔरpip wheel --download-cacheकमांड लाइन झंडे को हटा दिया गया है और कार्यक्षमता हटा दी गई है। चूंकि पाइप अब स्वचालित रूप से कॉन्फ़िगर करता है और इसका उपयोग करता है आंतरिक HTTP कैश, जो--download-cacheमौजूदा विकल्पों को दबाता है , गैर-कार्यात्मक बना दिया गया है लेकिन फिर भी पाइप v8.0 में उनके हटाने तक स्वीकार किया जाएगा। अधिक जानकारी के लिए कृपया https://pip.pypa.io/en/latest/reference/pip_install.html## कोचिंग देखें
उपरोक्त लिंक से अधिक जानकारी :
V6.0 के साथ शुरू, पाइप डिफ़ॉल्ट कैश पर एक प्रदान करता है जो वेब ब्राउज़र के समान कार्य करता है। जबकि कैश डिफ़ॉल्ट रूप से चालू है और सही तरीके से डिज़ाइन किया गया है, तो आप कैश को अक्षम कर सकते हैं और
--no-cache-dirविकल्प का उपयोग करके हमेशा PyPI तक पहुंच सकते हैं ।
पिप व्हील एक बेहतरीन विकल्प है जो पैकेजों को प्री-कंपाइल करने की अतिरिक्त सुविधा के साथ आपको चाहिए। से सरकारी डॉक्स :
आवश्यकता के लिए पहियों का निर्माण करें (और इसकी सभी निर्भरताएं):
$ pip wheel --wheel-dir=/tmp/wheelhouse SomePackage
अब आपकी /tmp/wheelhouseनिर्देशिका में आपकी सभी निर्भरताएँ पूर्वनिर्धारित हैं, इसलिए आप फ़ोल्डर को किसी अन्य सर्वर पर कॉपी कर सकते हैं और इस कमांड के साथ सब कुछ स्थापित कर सकते हैं:
$ pip install --no-index --find-links=/tmp/wheelhouse SomePackage
ध्यान दें कि सभी पैकेज मशीनों में पूरी तरह से पोर्टेबल नहीं होंगे। कुछ पैकेज विशेष रूप से पायथन संस्करण, ओएस वितरण और / या हार्डवेयर आर्किटेक्चर के लिए बनाए जाएंगे जो आप उपयोग कर रहे हैं। यह फ़ाइल नाम में निर्दिष्ट किया जाएगा, जैसे -cp27-none-linux_x86_64कि सीपीथॉन 2.7 के लिए 64-बिट लिनक्स आदि।
केवल पाइप का उपयोग करना (मेरा संस्करण 1.2.1 है), आप इस तरह से एक स्थानीय भंडार भी बना सकते हैं:
if ! pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>; then
pip install --download-directory="$PIP_SDIST_INDEX" <package>
pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>
fi
पाइप की पहली कॉल में, आवश्यकताओं फ़ाइल से संकुल को स्थानीय भंडार (केवल) में देखा जाता है, और फिर वहाँ से स्थापित किया जाता है। यदि वह विफल रहता है, तो पाइप अपने सामान्य स्थान (जैसे कि PyPI) से संकुल को पुनः प्राप्त करता है और इसे डाउनलोड PIP_SDIST_INDEXकरता है (लेकिन कुछ भी उपयोग नहीं करता है!)। पहली कॉल "बार-बार" स्थानीय सूचकांक से पैकेज को ठीक से स्थापित करने के लिए है।
( --download-cacheएक स्थानीय फ़ाइल नाम जो पूरा (भाग निकले) यूआरएल है बनाता है, और पिप के साथ एक सूचकांक के रूप में उपयोग नहीं कर सकते --find-links। --download-cacheकैश्ड फ़ाइल का उपयोग करेगा, अगर मिल गया। हम पिप की दूसरी कॉल करने के लिए इस विकल्प को जोड़ सकता है, लेकिन सूचकांक के बाद से पहले से ही एक प्रकार के कैश के रूप में कार्य करता है, यह आवश्यक रूप से बहुत कुछ नहीं लाता है। यदि आपके सूचकांक को उदाहरण के लिए खाली कर दिया गया है, तो यह मदद करेगा।)
इसमें पाइप-एक्सीलेंस नामक एक नया समाधान है , pipजिसमें निर्मित कैशिंग के साथ एक ड्रॉप-इन प्रतिस्थापन है।
पाइप-गति कार्यक्रम पाइप के लिए एक आवरण है, पायथन पैकेज मैनेजर। यह एक या एक से अधिक आवश्यकताओं की फाइलों को देखते हुए पायथन आभासी वातावरण को आरंभ करने के लिए पाइप के उपयोग को तेज करता है। यह निम्नलिखित दो दृष्टिकोणों को मिलाकर बनता है:
स्रोत वितरण डाउनलोड को कैश किया जाता है और स्रोत वितरण अभिलेखागार का एक स्थानीय सूचकांक उत्पन्न करने के लिए उपयोग किया जाता है।
बाइनरी वितरण का उपयोग द्विआधारी घटकों (जैसे M2Crypto और LXML) के साथ निर्भरता स्थापित करने की प्रक्रिया को गति देने के लिए किया जाता है। इन निर्भरताओं को फिर से हर वर्चुअल वातावरण के लिए फिर से जोड़ने के बजाय हम उन्हें एक बार संकलित करते हैं और परिणाम को बाइनरी * .tar.gz वितरण के रूप में कैश करते हैं।
पेलोगिक निरंतर एकीकरण दासों के अपने खेत पर आभासी वातावरण को जल्दी और मज़बूती से शुरू करने के लिए पाइप-गति का उपयोग करता है जो लगातार इकाई परीक्षण चला रहे हैं (यह मूल उपयोग के मामलों में से एक था जिसके लिए पाइप-त्वरण विकसित किया गया था)। हम इसे अपने बिल्ड सर्वर पर भी उपयोग करते हैं।
हमने लगभग 10x स्पीडअप को स्विचिंग से देखा pipहै pip-accel।
एक सरल विकल्प है basket।
पैकेज के नाम को देखते हुए, यह इसे और सभी निर्भरता को एक केंद्रीय स्थान पर डाउनलोड करेगा; पाइप कैश की कमियों के बिना। यह ऑफ़लाइन उपयोग के लिए बहुत अच्छा है।
आप तब इस निर्देशिका को स्रोत के रूप में उपयोग कर सकते हैं pip:
pip install --no-index -f file:///path/to/basket package
या easy_install:
easy_install -f ~/path/to/basket -H None package
जब भी आप ऑनलाइन हों तो टोकरी को अपडेट करने के लिए भी इसका उपयोग कर सकते हैं।