Как установить пакеты Python со всеми зависимостями в автономном режиме через pip3?

Как установить пакеты Python со всеми зависимостями в автономном режиме через pip3?

Во-первых, мне удалось установить Ansible на сервере, который не имеет доступа в интернет. Но я задаюсь вопросом, правильный ли у меня подход.

Сначала я скачал необходимые зависимости через pip3.

pip3 download ansible -d .

В результате были загружены следующие файлы:

ansible-2.9.4.tar.gz                          
cryptography-2.8-cp34-abi3-manylinux1_x86_64.whl  
MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl  
PyYAML-5.3.tar.gz
cffi-1.13.2-cp36-cp36m-manylinux1_x86_64.whl  
Jinja2-2.11.1-py2.py3-none-any.whl                
pycparser-2.19.tar.gz                              
six-1.14.0-py2.py3-none-any.whl

Теперь, когда я сделал эти файлы доступными на своем удаленном компьютере, я попытался использовать

pip3 install ansible-2.9.4.tar.gz

для установки ansible.

Это привело к следующей ошибке:

Processing ./ansible-2.9.4.tar.gz
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 
'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 
0x7f00726f9ef0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /simple/jinja2/

Поэтому я попробовал установить Jinja2 вручную:

pip3 install jinja2-2.11.1-py2.py3-none-any.whl

Но и это не сработало:

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection
 broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 
0x7fd303a23940>: Failed to establish a new connection: [Errno -2] Name or service not known',)': 
/simple/markupsafe/

После установки Markupsafe, Jinja2 также может быть установлен. В конце концов, pip3 install ansible-2.9.4.tar.gzя успешно установил ansible.

Теперь у меня такой вопрос. Есть ли способ указать pipиспользовать загруженные файлы для установки зависимостей или есть более простой подход установить определенный пакет Python со всеми его зависимостями в автономном режиме?

Спасибо за помощь и наилучшие пожелания. yabberth

решение1

Есть ли способ pipиспользовать загруженные файлы для установки зависимостей или есть более простой подход — установить определенный пакет Python со всеми его зависимостями в автономном режиме?

Я считаю, что то, что вы ищете, это--без индексаи--найти-ссылкиопции для pip install. Согласно официальной pip installдокументации по опциям:

--без индекса

Игнорировать индекс пакета (вместо этого просматриваются только URL-адреса --find-links).

-f, --find-links

Если url или путь к html-файлу, то парсить на предмет ссылок на архивы. Если локальный путь или file:// url, то это каталог, то искать архивы в списке каталогов.

С помощью этих опций вы можете выполнить, например, локальную установку:

pip3 install --no-index --find-links /some/path <package name>

или удаленная установка (например, через HTTP):

pip3 install --no-index --find-links http:\\remotes\server <package name>

В вашем случае вы должны иметь возможность просто использовать ansibleдля имени пакета, например:

pip3 install --no-index --find-links /some/path ansible

pip3 install --no-index --find-links http:\\remotes\server ansible

Хотя при желании можно использовать полное имя файла:

pip3 install --no-index --find-links /some/path ansible-2.9.4.tar.gz

pip3 install --no-index --find-links http:\\remotes\server ansible-2.9.4.tar.gz

Предполагая, что все требуемые зависимости находятся в одном и том же месте (как указано в вашем исходном вопросе), их следует установить как обычно (т. е. без необходимости вручную устанавливать каждую зависимость по порядку).


Требования

Другим вариантом может быть создание файла требований с правильным порядком установки зависимостей, например:

например, requirements.txt

/path/to/MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl 
/path/to/Jinja2-2.11.1-py2.py3-none-any.whl 
/path/to/ansible-2.9.4.tar.gz
# ...                          

Затем используйте eg pip3 install -r requirements.txtдля установки перечисленных пакетов. Вы также можете использовать eg HTTP-ссылки снова:

например, requirements.txt

http:\\remotes\server\MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl 
http:\\remotes\server\Jinja2-2.11.1-py2.py3-none-any.whl 
http:\\remotes\server\ansible-2.9.4.tar.gz
# ... 

Очевидным недостатком здесь является то, что, предполагая, что один пакет зависит от другого, вам уже нужно знать порядок, в котором необходимо устанавливать определенные пакеты.


Другие параметры URL

Вы также можете посмотретьраздел системы контроля версий (VCS)документации pip install, которая предлагает примеры комбинирования pip installсо ссылками VCS (например, Git, Mercurial, Subversion и Bazaar).


Рекомендации

pip-установка

pip install (опции)

решение2

Поскольку вам не нужно иметь полное зеркало, я бы посоветовал использоватьpython-pypi-зеркало:

1- Установите python-pypi-mirror с помощью pip на сервере, подключенном к интернету.

2- Установите модуль Python http.server на этом сервере.

3- Создайте каталог, в котором будут храниться ваши pip-пакеты.

4- Загрузите необходимые пакеты с помощью python-pypi-mirror в недавно созданный каталог, представленный как http-сервер (он будет содержать все его зависимости).

5- Установите нужный пакет удаленно.

 pip3 install --trusted-host <http_server> -i http://<http_server>:<http.server_default_port>/simple <package_name>

Все необходимые инструкции вы найдете здесь.

Связанный контент