मैं पाइप से स्थानीय कैश से कैसे स्थापित करूं?


142

मैं विभिन्न virtualenv वातावरण में एक ही पैकेज का एक बहुत स्थापित करते हैं। क्या कोई तरीका है कि मैं एक बार पैकेज डाउनलोड कर सकता हूं और फिर स्थानीय कैश से पाइप स्थापित कर सकता हूं ?

यह डाउनलोड बैंडविड्थ और समय को कम करेगा।


1
ध्यान दें कि पाइप 6.0 (2014-12-22) के अनुसार, पाइप डिफ़ॉल्ट रूप से कैश हो जाएगा। देखें pip.pypa.io/en/stable/reference/pip_install.html#caching जानकारी के लिए।
पाई डेलपोर्ट

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

जवाबों:


125

अपडेटेड उत्तर 19-नवंबर -15

पिप प्रलेखन के अनुसार :

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

टिप्पणियाँ

  1. यदि किसी पैकेज के नए संस्करण का पता लगाया जाता है, तो इसे डाउनलोड करके PIP_DOWNLOAD_CACHEडायरेक्टरी में जोड़ा जाएगा । उदाहरण के लिए, मेरे पास अब बहुत सारे Django पैकेज हैं।
  2. यह नेटवर्क एक्सेस की आवश्यकता को दूर नहीं करता है, जैसा कि पाइप समाचार में कहा गया है , इसलिए यह virtualenvsहवाई जहाज पर नया निर्माण करने के लिए जवाब नहीं है , लेकिन फिर भी महान है।

4
शायद बेहतर विचार यह है कि इसे .bashrc में डालें, क्योंकि bash_profile को केवल लॉगिन के दौरान निष्पादित किया जाता है। यह आपके ऊपर है, और वैसे भी यह एक अच्छी सलाह है :)
निकिता हिसमातोव

1
मैक पर इसे किसी भी शेल की शुरुआत में लोड किया जाता है।
saul.shanabrook

3
PIP_DOWNLOAD_CACHE गंभीर रूप से त्रुटिपूर्ण है और मैं आपकी तैनाती मशीनों से पैकेज प्राप्त करने जैसी चीजों के लिए इसका उपयोग करने की अनुशंसा नहीं करूंगा। यह अभी भी pypi.python.org पर निर्भर है। स्थानीय विकास कैश के लिए बढ़िया है, लेकिन भारी उपयोग के लिए उपयुक्त नहीं है।
15

1
@ साक्षरता पर आप टिप्पणी कर सकते हैं कि यह गंभीर रूप से दोषपूर्ण क्यों है? यदि आप नहीं चाहते कि PyPI पुनः प्राप्त हो, तो यह है कि -no-index किस लिए है; एक डाउनलोड कैश निश्चित रूप से PyPI तक पहुँचने के लिए रूढ़िवादी है या नहीं!
lvh

नीचे दिए गए @lvh स्लाइस का उत्तर बताता है कि क्यों पिप डाउनलोड कैश त्रुटिपूर्ण है। मैंने पाईप इंस्टॉल को कैश इनेबल्ड, विचित्र रूप से लंबे समय तक लेते देखा है। पाइप-त्वरण और टोकरी बेहतर विकल्प प्रतीत होते हैं।
प्रात:

52

मेरी राय में, pip2piइस समस्या का एक बहुत अधिक सुरुचिपूर्ण और विश्वसनीय समाधान है।

डॉक्स से:

pip2pi पाइप आवश्यकताओं से PyPI- संगत पैकेज भंडार बनाता है

pip2pi आपको दो सरल आदेशों का उपयोग करके अपना स्वयं का PyPI इंडेक्स बनाने की अनुमति देता है:

  1. पैकेज और उसकी सभी आवश्यकताओं को पूरा करने के लिए, उपयोग करें 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
    
  2. पिछली निर्देशिका से पैकेज इंडेक्स बनाने के लिए:

    $ 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
    
  3. आपके द्वारा चरण 2 में निर्मित सूचकांक से स्थापित करने के लिए, आप बस उपयोग कर सकते हैं:

    pip install --index-url=file:///tmp/packages/simple/ httpie==0.2
    

तुम भी एक दूरस्थ मेजबान के साथ अपने खुद के सूचकांक दर्पण कर सकते हैं pip2pi


+1 pip2pip बढ़िया काम करता है !! मुझे नेटवर्क कनेक्टिविटी पर निर्भर रहना पसंद नहीं है। यह तब विफल हो जाता है जब आपको इसकी आवश्यकता होती है।
MGP

यह बहुत अच्छा काम करता है, यह मेरे सवाल का जवाब देता है stackoverflow.com/questions/18052217/… , वहाँ भी जवाब दे सकते हैं?
लैरी कै

1
शायद यह निहित था, लेकिन यह स्पष्ट रूप से उल्लेख के लायक है: यह pip2tgzपता लगाता है कि क्या आपने पहले से ही निर्दिष्ट निर्देशिका में पैकेज डाउनलोड किया है, इसलिए यदि आप एक ही इंस्टॉल लाइन या कई स्थापित लाइनें चलाते हैं जिनमें अतिव्यापी निर्भरताएं हैं, तो यह केवल प्रत्येक पैकेज को एक बार डाउनलोड करेगा।
क्लक

32

नए पिप संस्करणों के लिए:

नए पिप संस्करण अब डिफ़ॉल्ट रूप से डाउनलोड करते हैं। देखें यह दस्तावेज:

https://pip.pypa.io/en/stable/reference/pip_install/#caching

पुराने Pip संस्करणों के लिए:

नाम की एक कॉन्फ़िगरेशन फ़ाइल बनाएं ~/.pip/pip.conf, और निम्नलिखित सामग्री जोड़ें:

[global]
download_cache = ~/.cache/pip

ओएस एक्स पर, चुनने का एक बेहतर तरीका होगा ~/Library/Caches/pipक्योंकि यह सम्मेलन के अन्य ओएस एक्स कार्यक्रमों का उपयोग करता है।


और अगर मैं उन्हें एक ही पीसी के अन्य उपयोगकर्ताओं के लिए उपयोग करने के लिए विश्व स्तर पर संग्रहीत करना चाहता था? मुझे यह कैसे करना है? मुझे लगता है कि config फाइल को / etc या कुछ में रखा जाना चाहिए ।
बटांडवा wa ’42१४

@ बबतंदवा: यह काम कर सकता है। यदि नहीं, तो आप यह कोशिश कर सकते हैं: सुनिश्चित करें कि सभी उपयोगकर्ताओं के पास pip.confएक download_cacheसेटिंग है जो समान सिस्टम-वाइड निर्देशिका को इंगित करता है।
फ्लिअम

28

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 आपके स्रोत नियंत्रण के तहत प्रतिबद्ध होगा। उत्पादन के लिए तैनात करते समय, आप उन्हें डाउनलोड किए बिना पैकेज स्थापित करने के लिए केवल दूसरी पाइप कमांड चलाएंगे।


गेब्रियल - यह दो बार डाउनलोड नहीं किया गया है, बस पहले चरण में एक बार और फिर दूसरे में स्थानीय कैश से इंस्टॉल किया गया है। आप क्या देख रहे हो?
15

अगर मैं पहला कदम दो बार चलाऊं, तो वह इसे दो बार डाउनलोड करेगा, है ना? कम से कम यहां हुआ। मुझे यह जानना होगा कि इस पैकेज के लिए पहले कदम को कम से कम एक बार निष्पादित करने से पहले निष्पादित किया गया है, अन्यथा यह एक ही फाइल को दो बार डाउनलोड करेगा। यदि मुझे इसे निष्पादित करने की आवश्यकता है तो मैं या तो कैसे जांच सकता हूं या इसे पहले डाउनलोड किया गया है?
गेब्रियल जोर्डो

आप शायद pip2pi का उपयोग करना चाहते हैं जैसा कि अन्य उत्तर बताते हैं। :)
स्लाइस

क्या यह निर्भरता को भी डाउनलोड करता है?
मोनकुट

मैं 18.1 पाइप का उपयोग करता हूं और विकल्प - कोई भी मौजूद नहीं है। इस उत्तर को कैसे अपडेट किया जाए इस पर कोई विचार?
पाओलोफो pa

13

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 तक पहुंच सकते हैं ।


9

पिप व्हील एक बेहतरीन विकल्प है जो पैकेजों को प्री-कंपाइल करने की अतिरिक्त सुविधा के साथ आपको चाहिए। से सरकारी डॉक्स :

आवश्यकता के लिए पहियों का निर्माण करें (और इसकी सभी निर्भरताएं):

$ 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-बिट लिनक्स आदि।


3

केवल पाइप का उपयोग करना (मेरा संस्करण 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कैश्ड फ़ाइल का उपयोग करेगा, अगर मिल गया। हम पिप की दूसरी कॉल करने के लिए इस विकल्प को जोड़ सकता है, लेकिन सूचकांक के बाद से पहले से ही एक प्रकार के कैश के रूप में कार्य करता है, यह आवश्यक रूप से बहुत कुछ नहीं लाता है। यदि आपके सूचकांक को उदाहरण के लिए खाली कर दिया गया है, तो यह मदद करेगा।)


3

इसमें पाइप-एक्सीलेंस नामक एक नया समाधान है , pipजिसमें निर्मित कैशिंग के साथ एक ड्रॉप-इन प्रतिस्थापन है।

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

  • स्रोत वितरण डाउनलोड को कैश किया जाता है और स्रोत वितरण अभिलेखागार का एक स्थानीय सूचकांक उत्पन्न करने के लिए उपयोग किया जाता है।

  • बाइनरी वितरण का उपयोग द्विआधारी घटकों (जैसे M2Crypto और LXML) के साथ निर्भरता स्थापित करने की प्रक्रिया को गति देने के लिए किया जाता है। इन निर्भरताओं को फिर से हर वर्चुअल वातावरण के लिए फिर से जोड़ने के बजाय हम उन्हें एक बार संकलित करते हैं और परिणाम को बाइनरी * .tar.gz वितरण के रूप में कैश करते हैं।

पेलोगिक निरंतर एकीकरण दासों के अपने खेत पर आभासी वातावरण को जल्दी और मज़बूती से शुरू करने के लिए पाइप-गति का उपयोग करता है जो लगातार इकाई परीक्षण चला रहे हैं (यह मूल उपयोग के मामलों में से एक था जिसके लिए पाइप-त्वरण विकसित किया गया था)। हम इसे अपने बिल्ड सर्वर पर भी उपयोग करते हैं।

हमने लगभग 10x स्पीडअप को स्विचिंग से देखा pipहै pip-accel


2

एक सरल विकल्प है basket

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

आप तब इस निर्देशिका को स्रोत के रूप में उपयोग कर सकते हैं pip:

pip install --no-index -f file:///path/to/basket package

या easy_install:

easy_install -f ~/path/to/basket -H None package

जब भी आप ऑनलाइन हों तो टोकरी को अपडेट करने के लिए भी इसका उपयोग कर सकते हैं।


सीमाएं (आधिकारिक पृष्ठ से): टोकरी डाउनलोड स्रोत वितरण केवल, यह उन पैकेजों को डाउनलोड नहीं कर सकता है जो PyPI पर होस्ट नहीं किए गए हैं और यह संस्करण आवश्यकताओं (जैसे "नाक> = 1.1.2") को अनदेखा करता है, हमेशा नवीनतम संस्करण डाउनलोड करता है।
११:२२ बजे हडोजनीज

0

मुझे लगता है कि पैकेज "पाइप-एक्सीलेंस" एक अच्छा विकल्प होना चाहिए।

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