Як встановити пакети офлайн?


159

Який найкращий спосіб завантажити пакет python і це залежність від pypi для встановлення офлайн на іншій машині? Чи є якийсь простий спосіб зробити це за допомогою pip або easy_install? Я намагаюся встановити бібліотеку запитів на вікно FreeBSD, який не підключений до Інтернету.


Відповіді:


77

Якщо пакет знаходиться на PYPI, завантажте його та його залежності в якийсь локальний каталог. Напр

$ mkdir / pypi && cd / pypi
$ ls -la
  -rw-r - r-- 1 павло співробітників 237954 19 квітня 11:31 Flask-WTF-0.6.tar.gz
  -rw-r - r-- 1 персонал pavel 389741 22 лютого 17:10 Jinja2-2.6.tar.gz
  -rw-r - r-- 1 персонал pavel 70305 11 квітня 00:28 MySQL-python-1.2.3.tar.gz
  -rw-r - r-- 1 персонал pavel 2597214 10 квітня 18:26 SQLAlchemy-0.7.6.tar.gz
  -rw-r - r-- 1 персонал pavel 1108056 22 лютого 17:10 Werkzeug-0.8.2.tar.gz
  -rw-r - r-- 1 персонал pavel 488207 10 квітня 18:26 boto-2.3.0.tar.gz
  -rw-r - r-- 1 штаб-квартира 490192 16 квітня 12:00 колба-0,9-dev-2a6c80a.tar.gz

Деякі пакети, можливо, доведеться архівувати вручну на схожих тарболах. Я роблю це багато, коли хочу отримати більш новітню (менш стабільну) версію чогось. Деякі пакети не містять PYPI, тому те саме стосується і них.

Припустимо, у вас правильно сформована програма Python в ~/src/myapp. ~/src/myapp/setup.pyбуде install_requiresсписок, в якому згадується одна або кілька речей, які ви маєте у своєму /pypiкаталозі. Так:

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

Якщо ви хочете мати змогу запускати свою програму з усіма необхідними залежностями, продовжуючи хакерство, ви зробите щось подібне:

$ cd ~ / src / myapp
$ python setup.py розробити - завжди-розпакувати --allow-hosts = Немає --find-links = / pypi

Таким чином ваш додаток буде виконуватися прямо з вашого вихідного каталогу. Ви можете зламати речі, а потім перезапустити додаток, не будуючи нічого.

Якщо ви хочете встановити додаток та його залежності в поточному середовищі python, ви зробите щось подібне:

$ cd ~ / src / myapp
$ easy_install --always-unzip --allow-hosts = Немає --find-links = / pypi.

В обох випадках збірка вийде з ладу, якщо в /pypiкаталозі немає однієї або декількох залежностей . Він не намагатиметься безладно встановити відсутні речі з Інтернету.

Я настійно рекомендую посилатися setup.py develop ...і easy_install ...в активному віртуальному середовищі, щоб уникнути зараження вашого глобального середовища Python. Це (virtualenv, який є) в значній мірі шлях. Ніколи нічого не встановлюйте в глобальне середовище Python.

Якщо машина, на якій ви створили свою програму, має таку ж архітектуру, що і машина, на якій ви хочете її розгорнути, ви можете просто за допомогою цілої картинки всьому каталогу віртуального середовища, в який ви easy_installвсе ввели. Однак перед тим, як тарболінг, ви повинні зробити каталог віртуального середовища переміщеним (див. Параметр - переїзд ). ПРИМІТКА: на машині призначення повинна бути встановлена ​​однакова версія Python, а також будь-які залежності на базі С, які може бути у вашому додатку, теж повинні бути попередньо встановлені (наприклад, якщо ви залежите від PIL , тоді libpng, libjpeg тощо повинні бути попередньо встановлені) .


3
Замість --allow-hosts=Noneвас можна було використовувати перемикач--no-index
роман

Чи можете ви, будь ласка, розробити, як створити правильно сформовану програму Python?
пн

3
@PrabhjotRai ласка , зверніться до packaging.python.org/distributing
Павлу Рєпін

299

Команда pip downloadдозволяє завантажувати пакети, не встановлюючи їх:

pip download -r requirements.txt

(У попередніх версіях pip це було написано pip install --download -r requirements.txt.)

Тоді ви можете використовувати pip install --no-index --find-links /path/to/download/dir/ -r requirements.txtдля встановлення завантажених диспетчерів, не маючи доступу до мережі.


Проблема з цим полягає в тому, що в залежності можуть бути інші залежності, і ті не завантажуватимуться.
vikki

Кошик змій (побудований на вершині піп) також завантажить залежності залежностей.
vikki

14
@vikki Неправда, "pip install --download" також завантажує залежності, тому наведені вище команди працюватимуть правильно, навіть якщо ваші вимоги мають додаткові залежності. Зміїний кошик може робити і інші корисні речі (ніколи не використовував його), але він точно не потрібен з цієї причини.
Карл Мейєр

6
@vikki Я розумію, що ти говориш, але я кажу тобі, що це неправда :-) Насправді слід спробувати спробувати, перш ніж опублікувати те саме твердження. Я просто помістив "pytest" у вимогу.txt, запустив "pip install --download. -R вимоги.txt", і він завантажив sdists як для pytest, так і для його настройки .py залежності, "py".
Карл Мейєр

3
Я думаю, що так має бути: --find-links file:/path/to/some/dir/і ви повинні завантажити та встановити з тією ж версією pip - інакше це може вийти з ладу
A. Binzxxxxxx

56

Якщо ви хочете встановити ліфти python та їх залежності в автономному режимі, виконайте такі дії на машині з тим самим ОС, підключеною до мережі та встановленим 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для завантаження libs та їх залежностей у каталогwheelhouse

3) Скопіюйте вимоги.txt у 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
Це найясніша відповідь із належними кроками для початківця. Спасибі
кумархарш

Це самий пітонічний спосіб, який я бачив досі. Дякую!
peluzza

2
але слідуючи вашій інструкції, коли я, pip installврешті-решт, він говорить: ПОМИЛКА: не вдалося знайти версію, яка б задовольняла вимогу .. "
DennisLi

@DennisLi, яка у вас версія python та pip?
чаокунянг

Я зрозумів це, тому що pip не може знайти конкретну версію пакету pandas у своїх вимогах.txt, оскільки я використовував pip3 для встановлення панд 0,2
DennisLi

13

офлайн python. для цього я використовую virtualenv (ізольоване середовище Python)

1) встановити онлайн virtualenv за допомогою pip:

pip install virtualenv --user

або в режимі офлайн з whl: перейдіть за цим посиланням , завантажте останню версію (.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так, поки ваш virtualenv активний, пишіть

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 {Flask-0.10.1.tar.gz, ...}]

контрольний список вашого пакету

pip list

зауважте: як і в 2017 році, краще використовувати python 3. Ви можете створити python 3 virtualenv за допомогою цієї команди.

virtualenv -p python3 envname

2
Тут, схоже, відсутні кроки або "затуманені", я б очікував побачити "дезактивувати", а потім "заморозити піп" ... CD офлайн і ./tranferred_packages з'являється з нізвідки - явно для цього потрібна чистка?
Ханну

можливо, але ви повинні врахувати "Я хотів короткий пост", "цей процес був складним, і я не міг писати кожен крок (це можливо лише на YouTube)".
cyera

Це найкраща відповідь імхо. Допомагав дуже
webofmars

Це було б найкращою відповіддю, якби воно взагалі щось говорило про те, як налаштувати папку tranferred_packages. Без вирішальних кроків, -1
Зім

8

Завантажте тарбол , перенесіть його на свою машину FreeBSD і витягніть її, після чого запустіть python setup.py installі все закінчено!

РЕДАКТУВАННЯ: Просто для додання цього пункту ви також можете встановити тарболи з піп.


1
Що з усіма залежностями? Який найкращий спосіб їх вирішити? Чи потрібно також встановлювати залежності вручну?
Кріс Дранц

Так, це, на жаль, єдиний спосіб, який я знаю.
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
У мене виникли проблеми зі з’єднанням на машині з Python 3.6 та вилученням іншого на Python 3.5: " <package> .whl не підтримується колесо на цій платформі ". Версія та адреса призначення можуть знадобитися, щоб вони відповідали деяким пакетам.
Juuso Ohtonen

5

У мене була подібна проблема. І мені довелося змусити його встановити так само, як ми робимо з pypi.

Я робив такі речі:

  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

    Скопіюйте пакунки.tar.gz на машину призначення, що не має доступу до Інтернету.

  4. На машині, яка не має доступу до Інтернету, зробіть наступне (якщо припустити, що ви скопіювали цільові пакети в / path / to / package / у поточній машині)

    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

Для Pip 8.1.2 ви можете використовувати pip download -r requ.txtдля завантаження пакетів на локальну машину.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.