2012-06-18 15 views
82

एक अजगर पैकेज डाउनलोड करने का सबसे अच्छा तरीका क्या है और दूसरी मशीन पर ऑफलाइन इंस्टॉलेशन के लिए पीपीआई से इसकी निर्भरता क्या है? क्या पीपी या easy_install के साथ ऐसा करने का कोई आसान तरीका है? मैं एक फ्रीबीएसडी बॉक्स पर अनुरोध पुस्तकालय स्थापित करने की कोशिश कर रहा हूं जो इंटरनेट से कनेक्ट नहीं है।पायथन पैकेज ऑफ़लाइन इंस्टॉलेशन

+1

संबंधित: [स्थानीय निर्देशिका से require.txt के अनुसार संकुल को कैसे पाइप करें?] (http://stackoverflow.com/q/7225900/95735) –

उत्तर

42

यदि पैकेज पीवाईपीआई पर है, तो इसे और इसकी निर्भरताओं को कुछ स्थानीय निर्देशिका में डाउनलोड करें। ईजी।

 
$ mkdir /pypi && cd /pypi 
$ ls -la 
    -rw-r--r-- 1 pavel staff 237954 Apr 19 11:31 Flask-WTF-0.6.tar.gz 
    -rw-r--r-- 1 pavel staff 389741 Feb 22 17:10 Jinja2-2.6.tar.gz 
    -rw-r--r-- 1 pavel staff 70305 Apr 11 00:28 MySQL-python-1.2.3.tar.gz 
    -rw-r--r-- 1 pavel staff 2597214 Apr 10 18:26 SQLAlchemy-0.7.6.tar.gz 
    -rw-r--r-- 1 pavel staff 1108056 Feb 22 17:10 Werkzeug-0.8.2.tar.gz 
    -rw-r--r-- 1 pavel staff 488207 Apr 10 18:26 boto-2.3.0.tar.gz 
    -rw-r--r-- 1 pavel staff 490192 Apr 16 12:00 flask-0.9-dev-2a6c80a.tar.gz 

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

मान लीजिए कि आपके पास ~/src/myapp में एक उचित ढंग से गठित पायथन एप्लिकेशन है। ~/src/myapp/setup.py में install_requires सूची होगी जो आपके /pypi निर्देशिका में आपके एक या अधिक चीज़ों का उल्लेख करती है। इसलिए जैसा:

install_requires=[ 
    'boto', 
    'Flask', 
    'Werkzeug', 
    # and so on 

आप सभी आवश्यक निर्भरता के साथ अपने अनुप्रयोग चलाने के लिए सक्षम होने के लिए चाहते हैं, जबकि अभी भी उस पर हैकिंग, आप कुछ इस तरह करेंगे:

 
$ cd ~/src/myapp 
$ python setup.py develop --always-unzip --allow-hosts=None --find-links=/pypi 

यह आपके ऐप रास्ता सीधे आपकी स्रोत निर्देशिका से निष्पादित किया जाएगा। आप चीजों पर हैक कर सकते हैं, और फिर कुछ भी पुनर्निर्माण किए बिना ऐप को दोबारा शुरू कर सकते हैं।

आप अपने अनुप्रयोग और वर्तमान अजगर वातावरण में अपनी निर्भरता को स्थापित करना चाहते हैं, तो आप कुछ इस तरह करेंगे:

 
$ cd ~/src/myapp 
$ easy_install --always-unzip --allow-hosts=None --find-links=/pypi . 

दोनों मामलों में, यदि एक या अधिक निर्भरता 'नहीं कर रहे निर्माण असफल हो जायेगी टी /pypi निर्देशिका में मौजूद है। यह इंटरनेट से लापता चीजों को निश्चित रूप से स्थापित करने का प्रयास नहीं करेगा।

मैं अपने वैश्विक पायथन पर्यावरण को दूषित करने से बचने के लिए सक्रिय virtual environment के भीतर setup.py develop ... और easy_install ... को आमंत्रित करने की अत्यधिक अनुशंसा करता हूं। यह है (वर्चुअलएन्व जो है) जाने का रास्ता बहुत अधिक है। ग्लोबल पायथन पर्यावरण में कुछ भी इंस्टॉल न करें।

यदि आपने जिस मशीन को अपना ऐप बनाया है, उसी मशीन के समान मशीन है जिस पर आप इसे तैनात करना चाहते हैं, तो आप बस पूरे वर्चुअल पर्यावरण निर्देशिका को टैरबॉल कर सकते हैं जिसमें आप easy_install-सब कुछ कर सकते हैं। हालांकि टैरबॉलिंग से ठीक पहले, आपको वर्चुअल पर्यावरण निर्देशिका को स्थानांतरित करना होगा (--relocatable विकल्प देखें)। नोट: गंतव्य मशीन को पाइथन के समान संस्करण की आवश्यकता होती है, और आपके ऐप को भी किसी भी सी-आधारित निर्भरताओं को पहले से इंस्टॉल किया जाना चाहिए (उदाहरण के लिए कहें कि आप PIL पर निर्भर हैं, तो libpng, libjpeg, आदि होना चाहिए पूर्व-स्थापित)।

+2

'--allow-hosts = none' के बजाय आप स्विच '--no-index' – romor

+0

स्विच का उपयोग कर सकते हैं क्या आप कृपया सही ढंग से गठित पायथन एप्लिकेशन कैसे बनाएं, विस्तारित कर सकते हैं? –

+2

@ प्रभाजोतराई कृपया https://packaging.python.org/distributing/ –

4

tarball डाउनलोड करें, इसे अपने फ्रीबीएसडी मशीन में स्थानांतरित करें और इसे निकालें, बाद में python setup.py install चलाएं और आप कर चुके हैं!

संपादित करें: बस उस पर जोड़ने के लिए, आप अब पाइप के साथ टैरबॉल स्थापित कर सकते हैं।

+1

सभी निर्भरताओं के बारे में क्या? उन्हें हल करने का सबसे अच्छा तरीका क्या है? क्या मुझे निर्भरता को मैन्युअल रूप से स्थापित करने की आवश्यकता है? –

+0

हां, यह दुर्भाग्य से एकमात्र तरीका है जिसे मैं जानता हूं। – dav1d

157

मैं -d (या --download) विकल्प pip install पर विकल्प का उपयोग करता हूं, जो पीईपीआई से एसडीआईस्ट टैरबॉल डाउनलोड करने की प्रक्रिया को बहुत आसान बनाता है।उदाहरण के लिए, pip install --download /path/to/some/dir celery अजवाइन के लिए एसडीआईटी टैरबॉल और इसकी सभी निर्भरताओं को /path/to/some/dir (लेकिन उन्हें इंस्टॉल नहीं करेगा) डाउनलोड करेगा। फिर आप नेटवर्क डाउनलोड किए बिना, डाउनलोड किए गए sdists का उपयोग करके अजवाइन स्थापित करने के लिए pip install --no-index --find-links /path/to/some/dir/ celery का उपयोग कर सकते हैं।

एक ही प्रक्रिया काम करती है यदि आप को -r requirements.txt के साथ दोनों आदेशों में प्रतिस्थापित करते हैं, जहां require.txt एक पीपी आवश्यकता फ़ाइल है जो आप चाहते हैं कि सभी संकुल सूचीबद्ध करें (और वैकल्पिक रूप से आप चाहते हैं संस्करण)।

अद्यतन

प्रतिवाद: पिप --download पदावनत किया गया है स्थापित करने और भविष्य में निकाला हो जाएगा। पिप में अब download कमांड है जो इसके बजाय होना चाहिए।

आदेश इस तरह है:
pip download -r requirements.txt

python3 के लिए:
pip3 download -r requirements.txt

+0

समस्या का संदर्भ लें, यह निर्भर करता है कि निर्भरताओं में अन्य निर्भरताएं हो सकती हैं और वे डाउनलोड नहीं की जाएंगी। – vikki

+0

[सांप टोकरी] (https://github.com/prezi/snakebasket) (पीआईपी के शीर्ष पर बनाया गया) निर्भरता की निर्भरताओं को भी डाउनलोड करेगा। – vikki

+4

@vikki सच नहीं है, "पीआईपी इंस्टॉल - डाउनलोड" भी निर्भरता डाउनलोड करता है, इसलिए उपरोक्त आदेश सही ढंग से काम करेंगे भले ही आपकी आवश्यकताओं में अतिरिक्त निर्भरताएं हों। सांप टोकरी अन्य उपयोगी चीजें कर सकती है (इसे कभी भी इस्तेमाल नहीं किया जाता है), लेकिन उस कारण के लिए निश्चित रूप से इसकी आवश्यकता नहीं है। –

2

पिप के लिए 8.1.2 आप pip download -r requ.txt अपनी स्थानीय मशीन पर संकुल डाउनलोड करने के लिए उपयोग कर सकते हैं।

2

ऑफलाइन पायथन। WHL साथ

pip install virtualenv --user 

या ऑफलाइन: ऐसा करने के लिए मैं पिप के साथ virtualenv ऑनलाइन virtualenv (पृथक अजगर पर्यावरण)

1) स्थापित का उपयोग करें, इस link के लिए जाने के पिछले संस्करण (.whl या टार डाउनलोड करें। GZ) और स्थापित है कि इस आदेश के साथ:

pip install virtualenv-15.1.0-py2.py3-none-any.whl --user 

--user का उपयोग करके आप sudo pip… उपयोग करने की आवश्यकता नहीं है।

2) का उपयोग virtualenv

ऑनलाइन मशीन पर

टर्मिनल cd के साथ एक निर्देशिका का चयन करें और इस कोड को चलाएँ:

python -m virtualenv myenv 
cd myenv 
source bin/activate 
pip install Flask 
सभी पैकेज स्थापित करने के बाद

, आप एक requirements.txt इसलिए उत्पन्न करने के लिए अपने virtualenv है, जबकि राशि सक्रिय,

pip freeze > requirements.txt 

नया टर्मिनल खोलें औरजैसे अन्य एनवी बनाएं।

python -m virtualenv myenv2 
cd myenv2 
source bin/activate 
cd - 
ls 

अब आप अपने ऑफ़लाइन फ़ोल्डर जहाँ आपके requirements.txt और tranferred_packages फ़ोल्डर वहाँ में हैं करने के लिए जा सकते हैं। निम्नलिखित कोड के साथ संकुल डाउनलोड करें और उन सभी को tranferred_packages फ़ोल्डर में डाल दें।

pip download -r requirements.txt 

ऑफ़लाइन कंप्यूटर के लिए अपनी ऑफ़लाइन फ़ोल्डर ले और फिर

python -m virtualenv myenv2 
cd myenv2 
source bin/activate 
cd - 
cd offline 
pip install --no-index --find-links="./tranferred_packages" -r requirements.txt 

क्या में फ़ोल्डर ऑफ़लाइन [requirements.txt, tranferred_packages है {कुप्पी के 0.10.1.tar.gz, ...} ] अपने पैकेज

pip list 

नोट के

जांच सूची: के रूप में हम 2017 में हैं यह अजगर 3. यो उपयोग करने के लिए बेहतर है आप इस कमांड के साथ पायथन 3 वर्चुअलएनवी बना सकते हैं।

virtualenv -p python3 envname 
+0

यहां कुछ गुम या "obfuscated" दिखाई देने लगते हैं, मैं एक 'निष्क्रिय' और फिर 'पीपी फ्रीज' देखने की उम्मीद करता हूं ... सीडी ऑफ़लाइन और ./tranferred_packages कहीं से नहीं दिखाई देते हैं - स्पष्ट रूप से इसे एक सफाई की आवश्यकता है? – Hannu

+0

शायद, लेकिन आपको 'मैं एक संक्षिप्त पोस्ट चाहता था' पर विचार करना चाहिए, 'यह प्रक्रिया जटिल थी और मैं हर कदम (जो केवल यूट्यूब में संभव है) नहीं लिख सका। – cyera

2

wheel संकलित संकुल का उपयोग करना।

बंडल अप:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX) 
$ pip wheel -r requirements.txt --wheel-dir=$tempdir 
$ cwd=`pwd` 
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *) 

प्रतिलिपि टारबॉल और स्थापित:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX) 
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2) 
$ pip install --force-reinstall --ignore-installed --upgrade --no-index --no-deps $tempdir/* 

नोट wheel द्विआधारी संकुल मशीनों के लिए नहीं हैं।

अधिक रेफरी। यहां: https://pip.pypa.io/en/stable/user_guide/#installation-bundles

+1

मुझे पाइथन 3.6 के साथ मशीन पर बंडल करने और पायथन 3.5 के साथ दूसरे पर निकालने के साथ समस्याएं थीं: "_ .whl इस प्लेटफ़ॉर्म पर समर्थित व्हील नहीं है"। कुछ संकुलों के साथ मिलान करने के लिए स्रोत और गंतव्य संस्करणों की आवश्यकता हो सकती है। –

संबंधित मुद्दे