ऑफलाइन पैकेज कैसे स्थापित करें?


160

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


जवाबों:


77

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

$ mkdir / pypi और& cd / pypi
$ एलएस -ला
  -rw-r - r-- 1 पावेल स्टाफ 237954 Apr 19 11:31 फ्लास्क-डब्ल्यूटीएफ-0.6.tar.gz
  -rw-r - r-- 1 पावेल स्टाफ 389741 Feb 22 17:10 Jinja2-2.6.tar.gz
  -rw-r - r-- 1 पावेल स्टाफ 70305 Apr 11 00:28 MySQL-python-1.2.3.t.t.z
  -rw-r - r-- 1 पावेल स्टाफ 2597214 Apr 10 18:26 SQLAlchemy-0.7.6.tar.gz
  -rw-r - r-- 1 पावेल स्टाफ 1108056 22 फरवरी 17:10 विर्कजेग-0.8.2.tar.gz
  -rw-r - r-- 1 पावेल स्टाफ 488207 Apr 10 18:26 boto-2.3.0.tar.gz
  -rw-r - r-- 1 पावेल स्टाफ 490192 अप्रैल 16 12:00 फ्लास्क-0.9-देव -2a6c80a.tar.gz

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

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

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

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

$ cd ~ / src / myapp
$ python setup.py --always-unzip --allow-मेजबान = कोई नहीं --find-links = / pypi

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

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

$ cd ~ / src / myapp
$ easy_install --always-unzip --allow-मेजबान = कोई नहीं-find- लिंक = / pypi।

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

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

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


3
इसके बजाय --allow-hosts=Noneआप स्विच का उपयोग कर सकते हैं--no-index
रोमांस

क्या आप कृपया यह बता सकते हैं कि एक उचित रूप से गठित पायथन एप्लिकेशन कैसे बनाया जाए?
Psr

3
@PrabhjotRai का संदर्भ लें packaging.python.org/distributing
पावेल रेपिन

300

पाइप downloadकमांड आपको पैकेजों को बिना इंस्टॉल किए डाउनलोड करने देता है:

pip download -r requirements.txt

(पाइप के पिछले संस्करणों में, यह वर्तनी थी pip install --download -r requirements.txt।)

फिर आप pip install --no-index --find-links /path/to/download/dir/ -r requirements.txtउन डाउनलोड किए गए sdists को स्थापित करने के लिए उपयोग कर सकते हैं , नेटवर्क तक पहुंच के बिना।


इसके साथ समस्या यह है कि आश्रितों के पास अन्य निर्भरताएं हो सकती हैं और उन्हें डाउनलोड नहीं किया जाएगा।
विक्की

स्नेक बास्केट (पाइप के ऊपर निर्मित) निर्भरता की निर्भरता को भी डाउनलोड करेगा।
विक्की

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

6
@vikki मैं समझता हूं कि आप क्या कह रहे हैं, लेकिन मैं आपको बता रहा हूं कि यह सच नहीं है :-) आपको फिर से वही दावा करने से पहले वास्तव में कोशिश करनी चाहिए। मैंने सिर्फ एक आवश्यकताओं में "pytest" डाला, "पाइप इंस्टॉल --download -r आवश्यकताएँ.txt" चलाया, और इसने pytest और इसके setup.py निर्भरता, "py" दोनों के लिए sdists डाउनलोड किया।
कार्ल मेयर

3
मुझे लगता है कि यह होना चाहिए: --find-links file:/path/to/some/dir/और आपको पाइप के एक ही संस्करण के साथ डाउनलोड और इंस्टॉल करना चाहिए - अन्यथा यह विफल हो सकता है
ए। Binzxxxxxx

57

यदि आप python libs और उनकी निर्भरताएँ ऑफ़लाइन स्थापित करना चाहते हैं, तो मशीन पर इन चरणों को उसी os, नेटवर्क कनेक्टेड, और python स्थापित के साथ समाप्त करें:

1) requirements.txtइसी तरह की सामग्री के साथ एक फ़ाइल बनाएं (नोट - ये वे लाइब्रेरी हैं जिन्हें आप डाउनलोड करना चाहते हैं):

Flask==0.12
requests>=2.7.0
scikit-learn==0.19.1
numpy==1.14.3
pandas==0.22.0

आवश्यकताओं फ़ाइल बनाने के लिए एक विकल्प का उपयोग करना है pip freeze > requirements.txt। यह आपके वातावरण में सभी पुस्तकालयों को सूचीबद्ध करेगा। तब आप अंदर जा सकते हैं requirements.txtऔर गैर-जरूरी सामान निकाल सकते हैं।

2) mkdir wheelhouse && pip download -r requirements.txt -d wheelhouseनिर्देशिका के लिए लिबास और उनकी निर्भरता डाउनलोड करने के लिए कमांड निष्पादित करेंwheelhouse

3) wheelhouseनिर्देशिका में आवश्यकताओं को कॉपी करें

4) पुरालेख व्हीलर wheelhouse.tar.gzसाथ मेंtar -zcf wheelhouse.tar.gz wheelhouse

फिर wheelhouse.tar.gzअपनी लक्षित मशीन पर अपलोड करें:

1) tar -zxf wheelhouse.tar.gzफ़ाइलों को निकालने के लिए निष्पादित करें

2) pip install -r wheelhouse/requirements.txt --no-index --find-links wheelhouseपरिवादों और उनकी निर्भरता को स्थापित करने के लिए निष्पादित करें


6
यह एक शुरुआत के लिए उचित कदम के साथ सबसे स्पष्ट उत्तर है। धन्यवाद
kumarharsh

यह अब तक मैंने देखा है सबसे अधिक pythonic तरीका है। धन्यवाद!
पेलुज़ा

2
लेकिन आपके निर्देश का पालन करते हुए, जब मैं pip installअंत में, यह कहता है: त्रुटि: एक ऐसा संस्करण नहीं मिला जो आवश्यकता को पूरा करता हो .. `
डेनिसली

@ डेनिसली आपका अजगर और पाइप संस्करण क्या है?
चोकुनयांग

मुझे यह समझ में आया, ऐसा इसलिए है क्योंकि पाइप को मेरी आवश्यकताओं में पांडा पैकेज का विशिष्ट संस्करण नहीं मिल रहा है। इसलिए, जब मैंने पाइप को स्थापित करने के लिए पाइप 3 का उपयोग किया था 0.2
डेनिसली

13

ऑफ़लाइन अजगर। ऐसा करने के लिए मैं virtualenv (पृथक पायथन पर्यावरण) का उपयोग करता हूं

1) पाइप के साथ virtualenv ऑनलाइन स्थापित करें:

pip install virtualenv --user

या ऑफ़लाइन के साथ: इस लिंक पर जाएं , अंतिम संस्करण (.whl या tar.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वर्चुअलाइजेशन सक्रिय रहते हुए लिखना होगा

pip freeze > requirements.txt

एक नया टर्मिनल खोलें और एक और env बनाएं myenv2

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

ऑफ़लाइन फ़ोल्डर में क्या है [आवश्यकताएँ। txt, tranferred_packages {फ्लास्क-0.10.1.tar.gz, ...]]

अपने पैकेज की सूची देखें

pip list

ध्यान दें: जैसा कि हम 2017 में हैं यह अजगर 3 का उपयोग करना बेहतर है। आप इस आदेश के साथ अजगर 3 virtualenv बना सकते हैं।

virtualenv -p python3 envname

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

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

यह सबसे अच्छा जवाब imho है। बहुत मदद की
webofmars 10

यह सबसे अच्छा जवाब होगा अगर यह बिल्कुल भी कहा जाए कि कैसे tranferred_packages फ़ोल्डर को सेटअप किया जाए। महत्वपूर्ण चरणों के बिना, -1
Zim

8

टारबॉल डाउनलोड करें , इसे अपनी FreeBSD मशीन में स्थानांतरित करें और इसे निकालें, बाद में चलाएं python setup.py installऔर आपका काम हो गया!

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


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

हाँ, यह दुर्भाग्य से एकमात्र तरीका है जो मुझे पता है।
dav1d

8

मुझे कदम से कदम प्रक्रिया के माध्यम से जाने दो:

  1. इंटरनेट से जुड़े कंप्यूटर पर, एक फ़ोल्डर बनाएं।
   $ mkdir packages
   $ cd packages
  1. कमांड प्रॉम्प्ट या शेल खोलें और निम्न कमांड निष्पादित करें:

    मान लीजिए कि आपको जो पैकेज चाहिए वह है tensorflow

    $ pip download tensorflow

  2. अब, लक्ष्य कंप्यूटर पर, packagesफ़ोल्डर की प्रतिलिपि बनाएँ और निम्न आदेश लागू करें

  $ cd packages
  $ pip install 'tensorflow-xyz.whl' --no-index --find-links '.'

ध्यान दें कि tensorflow-xyz.whlआवश्यक पैकेज के मूल नाम से प्रतिस्थापित किया जाना चाहिए।


6

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 के साथ दूसरे पर निकालने के मुद्दे थे: " <पैकेज>इस प्लेटफॉर्म पर समर्थित पहिया नहीं है "। स्रोत और गंतव्य संस्करणों को कुछ पैकेजों के साथ मिलान करने की आवश्यकता हो सकती है।
जुसो ओह्टनन

6

मुझे भी ऐसी ही समस्या का समाधान करना पड़ा था। और मुझे इसे उसी तरह से स्थापित करना था, हम पेपी से करते हैं।

मैंने निम्नलिखित बातें की:

  1. मशीन के सभी पैकेजों को स्टोर करने के लिए एक निर्देशिका बनाएं जिसमें इंटरनेट एक्सेस हो।

    mkdir -p /path/to/packages/
  2. पथ के लिए सभी पैकेजों को डाउनलोड करें

    pip download -r requirements.txt -d /path/to/packages
    
    Eg:- ls /root/wheelhouse/  # **/root/wheelhouse** is my **/path/to/packages/**
    total 4524
    -rw-r--r--. 1 root root   16667 May 23  2017 incremental-17.5.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   34713 Sep  1 10:21 attrs-18.2.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root 3088398 Oct 15 14:41 Twisted-18.9.0.tar.bz2
    -rw-r--r--. 1 root root  133356 Jan 28 15:58 chardet-3.0.4-py2.py3-none-any.whl
    -rw-r--r--. 1 root root  154154 Jan 28 15:58 certifi-2018.11.29-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   57987 Jan 28 15:58 requests-2.21.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   58594 Jan 28 15:58 idna-2.8-py2.py3-none-any.whl
    -rw-r--r--. 1 root root  118086 Jan 28 15:59 urllib3-1.24.1-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   47229 Jan 28 15:59 tqdm-4.30.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root    7922 Jan 28 16:13 constantly-15.1.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root  164706 Jan 28 16:14 zope.interface-4.6.0-cp27-cp27mu-manylinux1_x86_64.whl
    -rw-r--r--. 1 root root  573841 Jan 28 16:14 setuptools-40.7.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   37638 Jan 28 16:15 Automat-0.7.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   37905 Jan 28 16:15 hyperlink-18.0.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   52311 Jan 28 16:15 PyHamcrest-1.9.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   10586 Jan 28 16:15 six-1.12.0-py2.py3-none-any.whl
  3. पैकेज निर्देशिका को टार करें और इसे उस मशीन पर कॉपी करें जिसमें इंटरनेट एक्सेस नहीं है। फिर करो,

    cd /path/to/packages/
    tar -cvzf packages.tar.gz .  # not the . (dot) at the end

    ऐसे पैकेज मशीन को कॉपी करें, जिसमें इंटरनेट एक्सेस नहीं है।

  4. जिस मशीन में इंटरनेट की सुविधा नहीं है, वह निम्न करें (मान लें कि आपने तारांकित पैकेजों को / पथ / से / पैकेज / वर्तमान मशीन में कॉपी कर लिया है )

    cd /path/to/packages/
    tar -xvzf packages.tar.gz
    mkdir -p $HOME/.config/pip/
    
    vi $HOME/.config/pip/pip.conf

    और नीचे दी गई सामग्री को पेस्ट करें और इसे सहेजें।

    [global]
    timeout = 10
    find-links = file:///path/to/package/
    no-cache-dir = true
    no-index = true
  5. अंत में, मेरा सुझाव है कि आप virtualenvपैकेजों को स्थापित करने के लिए किसी न किसी रूप का उपयोग करें ।

    virtualenv -p python2 venv # use python3, if you are on python3
    source ./venv/bin/activate
    pip install <package>

आपको उन सभी मॉड्यूल को डाउनलोड करने में सक्षम होना चाहिए जो निर्देशिका / पथ / से / पैकेज / में हैं

नोट: मैंने केवल यह किया है, क्योंकि मैं विकल्प नहीं जोड़ सका या हम मॉड्यूल को स्थापित करने के तरीके को बदल नहीं सकते हैं। नहीं तो मैं कर चुका होता

    pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt

3

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

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