如何通过 pip3 离线安装包含所有依赖项的 python 包?

如何通过 pip3 离线安装包含所有依赖项的 python 包?

首先,我设法在没有互联网访问的服务器上安装了 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)结合的示例。


参考

pip 安装

pip 安装(选项)

答案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>

您将在这里找到所有需要的说明

相关内容