Во-первых, мне удалось установить 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).
Рекомендации
решение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>