首先,我设法在没有互联网访问的服务器上安装了 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 包?
我相信你正在寻找的是--无索引和--find-links选项pip install
。根据官方pip install
选项文档:
--无索引
忽略包索引(仅查看--find-links URL)。
-f, --find-links
如果是 html 文件的 URL 或路径,则解析存档链接。如果是目录的本地路径或 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
# ...
然后使用 egpip3 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-在具有互联网连接的服务器上使用 pip 安装 python-pypi-mirror。
2-在此服务器上安装 http.server python 模块。
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>