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

6l7fqoea  于 2023-06-04  发布在  Python
关注(0)|答案(8)|浏览(169)

我们正在尝试安装几个没有互联网的Python软件包。

For ex : python-keystoneclient

为此,我们从https://pypi.python.org/pypi/python-keystoneclient/1.7.1下载了软件包并将其保存在服务器中。
但是,在安装tar.gz和.whl包时,安装程序会首先查找要安装的依赖包。由于服务器中没有互联网连接,因此它会失败。
例如:对于python-keytoneclient,我们有以下依赖包

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-keytoneclient)的依赖包。

6fe3ivhb

6fe3ivhb1#

我是这样处理这个案子的:
在我可以访问Internet的计算机上:

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

您可能需要在命令中添加--no-deps,如下所示:

pip install python_keystoneclient-2.3.1-py2.py3-none-any.whl -f ./ --no-index --no-deps
33qvvth1

33qvvth12#

如果你想安装一堆依赖项,比如requirements.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
eagi6jfj

eagi6jfj3#

我们在工作中也有类似的情况,生产机器没有接入互联网;因此,必须脱机和脱离主机管理所有内容。
以下是我尝试过的不同程度的成功:

  1. basket,这是一个小工具,您可以在连接到Internet的主机上运行。它不会尝试安装一个包,而是下载它,以及它需要安装到一个目录中的所有其他东西。然后将此目录移动到目标计算机上。优点:非常容易和简单的使用,没有服务器头痛;没有要配置的端口。缺点:没有任何真实的的showstopper,但最大的一个是,它不尊重任何版本钉你可能有;它将总是下载软件包的最新版本。
    1.运行本地pypi服务器。使用pypiserverdevpipypiserver安装和设置超级简单; devpi需要更多的修饰。它们都做同样的事情--充当真实的的pypi的代理/缓存,以及任何本地软件包的本地pypi服务器。localshop是一个新的,我看的时候还没有,它也有同样的想法。它的工作原理是,你的互联网受限的机器将连接到这些服务器,然后它们连接到互联网,以便它们可以缓存和代理实际的存储库。
    第二种方法的问题是,尽管您可以获得最大的兼容性并访问整个Python包存储库,但您仍然需要确保任何/所有依赖项都安装在目标机器上(例如,数据库驱动程序的任何头文件和构建工具链)。此外,这些解决方案不适合非pypi存储库(例如,托管在github上的包)。
    第二个选择我们已经走得很远了,所以我肯定会推荐它。
    最终,厌倦了处理兼容性问题和库,我们将整个服务器迁移到商业支持的Docker容器。
    这意味着我们交付的一切都是预先配置的,实际上不需要在生产机器上安装任何东西,这对我们来说是最令人头痛的解决方案。
    我们用本地Docker镜像服务器替换了pypi仓库。
7cwmlq89

7cwmlq894#

这也是Praveen Yalagandula的回答。由于下载特定版本的python --python-version和特定平台,如linux --platform manylinux1_x86_64,答案中没有详细说明。

pip3 download somePackage --platform manylinux1_x86_64 --only-binary=:all: -d "/Users/ajaytomgeorge/Dev/wheels/"

还有一些高级参数可以通过FULL LIST of ARGUMENTS传递
示例

--progress-bar 
--no-build-isolation
--use-pep517
--check-build-dependencies
--ignore-requires-python
-d
--platform
--python-version.
--implementations

另一个例子是python2.7和mac

pip download --only-binary=:all: --platform macosx-10_10_x86_64 --python-version 27 --implementation cp SomePackage
s8vozzvw

s8vozzvw5#

pipdeptree是一个命令行工具,用于以依赖关系树的形式显示安装在virtualenv中的Python包。使用它:https://github.com/naiquevin/pipdeptree

gojuced7

gojuced76#

对于windows用户,如果您想在连接到internet的主机上的未连接到internet的env中安装pkgs

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

主机上,该主机不是

tar zxvf dependencies.tar.gz
cd dependencies
for %f in (*.whl) do pip install --no-index --find-links=./ %f
nue99wik

nue99wik7#

这不是答案我很挣扎,但后来意识到我的安装是试图连接到互联网下载依赖项。
所以,我先下载并安装了依赖项,然后用下面的命令安装。成功了

python -m pip install filename.tar.gz
jvidinwx

jvidinwx8#

您可以从PyPI手动下载'whl'文件:https://pypi.org/project/google-cloud-debugger-client/#files
然后将其定位在根文件夹中,您可以通过pip安装它:

pip install google_cloud_debugger_client-1.2.1-py2.py3-none-any.whl

相关问题