我们正在尝试安装几个没有互联网的python包。
For ex : python-keystoneclient
为此,我们从https://pypi.python.org/pypi/python-keystoneclient/1.7.1下载了包,并将其保存在服务器中。
但是,在安装tar.gz和.whl软件包时,安装程序首先要查找依赖软件包。由于服务器中没有互联网连接,因此失败了。
例如:对于python-keystoneclient,我们有以下依赖包
stevedore (>=1.5.0)
six (>=1.9.0)
requests (>=2.5.2)
PrettyTable (<0.8,>=0.7)
oslo.utils (>=2.0.0)
oslo.serialization (>=1.4.0)
oslo.i18n (>=1.5.0)
oslo.config (>=2.3.0)
netaddr (!=0.7.16,>=0.7.12)
debtcollector (>=0.3.0)
iso8601 (>=0.1.9)
Babel (>=1.3)
argparse
pbr (<2.0,>=1.6)
当我尝试从上面的列表中逐个安装软件包时,再次查找嵌套依赖项。
我们有没有办法列出 ALL 依赖包来安装python模块,比如python-keystoneclient。
答案 0 :(得分:47)
这就是我处理这种情况的方法:
在我可以访问互联网的机器上:
mkdir keystone-deps
pip download python-keystoneclient -d "/home/aviuser/keystone-deps"
tar cvfz keystone-deps.tgz keystone-deps
然后将tar文件移动到无法访问Internet的目标计算机并执行以下操作:
tar xvfz keystone-deps.tgz
cd keystone-deps
pip install python_keystoneclient-2.3.1-py2.py3-none-any.whl -f ./ --no-index
答案 1 :(得分:7)
我们的工作情况类似,生产机器无法访问互联网;因此,所有内容都必须离线管理并离开主机。
以下是我尝试过不同程度的成功:
basket
这是一个在互联网连接的主机上运行的小工具。它不是试图安装软件包,而是将其下载,以及将其安装到目录中所需的所有其他内容。然后,将此目录移动到目标计算机上。优点:非常简单易用,没有服务器头痛;没有要配置的端口。缺点:没有任何真正的showstoppers,但最大的一点是它不尊重任何你可能拥有的版本;它将始终下载最新版本的软件包。
运行本地pypi服务器。已使用pypiserver
和devpi
。 pypiserver
安装和设置非常简单; devpi
需要更多的探索。它们都做同样的事情 - 充当真正的pypi的代理/缓存,并作为任何本土包装的本地pypi服务器。 localshop
是一个新的,在我看的时候不在身边,它也有同样的想法。那么它是如何工作的,你的互联网限制机器将连接到这些服务器,然后它们连接到互联网,以便他们可以缓存和代理实际的存储库。
第二种方法的问题在于,尽管您获得了最大的兼容性并且可以访问整个Python包存储库,但仍需要确保在目标计算机上安装了所有/所有依赖项(例如,数据库的任何标头)驱动程序和构建工具链)。此外,这些解决方案不适合非pypi存储库(例如,托管在github上的软件包)。
我们在第二个选项上走得很远,所以我肯定会推荐它。
最终,由于厌倦了处理兼容性问题和库,我们将整个服务器马戏团迁移到商业支持的docker容器。
这意味着我们发布了预配置的所有内容,实际上并不需要在生产计算机上安装任何内容,这对我们来说是最令人头痛的解决方案。
我们用本地docker镜像服务器替换了pypi存储库。
答案 2 :(得分:6)
如果您要从中安装一堆依赖项(例如require.txt),则可以这样做:
mkdir dependencies
pip download -r requirements.txt -d "./dependencies"
tar cvfz dependencies.tar.gz dependencies
并且,一旦将dependencies.tar.gz转移到没有互联网的计算机上,您将执行以下操作:
tar zxvf dependencies.tar.gz
cd dependencies
pip install * -f ./ --no-index
答案 3 :(得分:1)
这不是答案。我当时很挣扎,但后来意识到我的安装程序试图连接到互联网以下载依赖项。
因此,我先下载并安装了依赖项,然后使用以下命令进行安装。有效
python -m pip install filename.tar.gz
答案 4 :(得分:0)
pipdeptree
是一个命令行实用程序,用于以依赖关系树的形式显示安装在virtualenv中的python包。
只需使用它:
https://github.com/naiquevin/pipdeptree