在没有internet的情况下安装python包,并使用源代码作为.tar.gz和.wh

2024-04-25 01:33:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我们试图在没有internet的情况下安装两个python包。

For ex : python-keystoneclient

为此,我们从https://pypi.python.org/pypi/python-keystoneclient/1.7.1下载包并将其保存在服务器中。

但是,在安装tar.gz和.whl包时,安装程序将首先查找要安装的从属包。由于服务器中没有internet连接,它将失败。

For ex:对于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)

当我试图从上面的列表中逐个安装软件包时,它再次寻找嵌套的依赖项。

有没有办法列出安装python模块(如python keystoneclient)的依赖包。


Tags: httpsorg服务器pypifor情况taroslo
3条回答

如果您想从requirements.txt安装一组依赖项,可以执行以下操作:

mkdir dependencies
pip download -r requirements.txt -d "./dependencies"
tar cvfz dependencies.tar.gz dependencies

而且,一旦将dependencies.tar.gz传输到没有internet的计算机上,您将执行以下操作:

tar zxvf dependencies.tar.gz
cd dependencies
pip install * -f ./ --no-index

我们在工作中也有类似的情况,生产机器无法访问互联网,因此所有的东西都必须离线和脱离主机进行管理。

以下是我尝试过的不同程度的成功:

  1. ^{}这是一个小型实用程序,可以在连接到internet的主机上运行。它不会尝试安装一个包,而是下载它,以及它需要安装到目录中的所有内容。然后将此目录移到目标计算机上。优点:非常简单易用,无服务器问题;无需配置端口。缺点:并没有什么真正的展示障碍,但最大的一点是它不尊重您可能拥有的任何版本固定;它总是会下载最新版本的软件包。

  2. 运行本地pypi服务器。使用^{}^{}pypiserver安装和设置非常简单;devpi需要更多的技巧。它们都做同样的事情-作为真正的pypi的代理/缓存,以及作为本地pypi服务器用于任何自行开发的包。^{}是一个新的,在我寻找的时候不在身边,它也有同样的想法。所以它的工作原理是,受internet限制的机器将连接到这些服务器,然后它们将连接到internet,以便它们可以缓存和代理实际的存储库。

第二种方法的问题是,尽管您获得了对整个Python包存储库的最大兼容性和访问权限,但仍然需要确保在目标计算机上安装了任何/所有依赖项(例如,数据库驱动程序的任何头文件和生成工具链)。此外,这些解决方案不适合非pypi存储库(例如,托管在github上的包)。

不过,我们在第二个选择上已经走得很远了,所以我绝对推荐。

最后,由于厌倦了处理兼容性问题和库,我们将整个服务器群迁移到商业支持的docker容器中。

这意味着我们将预先配置好的所有东西都发送出去,实际上不需要在生产机器上安装任何东西,这是我们最头疼的解决方案。

我们用本地docker映像服务器替换了pypi存储库。

我就是这样处理这个案子的:

在我可以上网的机器上:

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

相关问题 更多 >