在没有互联网的情况下安装 python 包并将源代码用作 .tar.gz 和 .whl
installing python packages without internet and using source code as .tar.gz and .whl
我们正在尝试在没有互联网的情况下安装几个 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。
pipdeptree
是一个命令行实用程序,用于以依赖树的形式显示安装在 virtualenv 中的 python 包。
只需使用它:
https://github.com/naiquevin/pipdeptree
我是这样处理这个案例的:
在我可以上网的机器上:
mkdir keystone-deps
pip download python-keystoneclient -d "/home/aviuser/keystone-deps"
tar cvfz keystone-deps.tgz keystone-deps
然后将tar文件移动到无法上网的目标机器上,执行以下操作:
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
我们工作中也有类似情况,生产机器无法上网;因此一切都必须离线管理 off-host.
以下是我尝试过的不同程度的成功:
basket
这是您在 internet-connected 主机上 运行 的一个小实用程序。它不会尝试安装包,而是会下载它,以及它需要安装到目录中的所有其他内容。然后将此目录移动到目标机器上。优点:非常简单易用,没有服务器问题;没有要配置的端口。缺点:没有任何真正的阻碍,但最大的一个是它不尊重您可能拥有的任何版本固定;它总是会下载最新版本的包。
运行 本地 pypi 服务器。 used pypiserver
and devpi
. pypiserver
is super simple to install and setup; devpi
takes a bit more finagling. They both do the same thing - act as a proxy/cache for the real pypi and as a local pypi server for any home-grown packages. localshop
是我看的时候没有的新的,也是这个思路。所以它的工作原理是您的 internet-restricted 机器将连接到这些服务器,然后它们连接到 Internet 以便它们可以缓存和代理实际的存储库。
第二种方法的问题在于,尽管您获得了最大的兼容性并可以访问 Python 软件包的整个存储库,但您仍然需要确保 any/all 依赖项已安装在目标计算机上(例如,任何 headers 用于数据库驱动程序和构建工具链)。此外,这些解决方案不适合 non-pypi 存储库(例如,托管在 github 上的包)。
尽管我们对第二个选项已经走得很远,所以我肯定会推荐它。
最终,厌倦了处理兼容性问题和库,我们将整个服务器群迁移到商业支持的 docker 容器。
这意味着我们运送所有东西 pre-configured,实际上不需要在生产机器上安装任何东西,这对我们来说是最 headache-free 的解决方案。
我们用本地 docker 图像服务器替换了 pypi 存储库。
如果你想从 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
这不是答案。我很挣扎,但后来意识到我的安装正在尝试连接到互联网以下载依赖项。
所以,我先下载并安装依赖项,然后使用以下命令安装。成功了
python -m pip install filename.tar.gz
您可以从 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
我们正在尝试在没有互联网的情况下安装几个 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。
pipdeptree
是一个命令行实用程序,用于以依赖树的形式显示安装在 virtualenv 中的 python 包。
只需使用它:
https://github.com/naiquevin/pipdeptree
我是这样处理这个案例的:
在我可以上网的机器上:
mkdir keystone-deps
pip download python-keystoneclient -d "/home/aviuser/keystone-deps"
tar cvfz keystone-deps.tgz keystone-deps
然后将tar文件移动到无法上网的目标机器上,执行以下操作:
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
我们工作中也有类似情况,生产机器无法上网;因此一切都必须离线管理 off-host.
以下是我尝试过的不同程度的成功:
basket
这是您在 internet-connected 主机上 运行 的一个小实用程序。它不会尝试安装包,而是会下载它,以及它需要安装到目录中的所有其他内容。然后将此目录移动到目标机器上。优点:非常简单易用,没有服务器问题;没有要配置的端口。缺点:没有任何真正的阻碍,但最大的一个是它不尊重您可能拥有的任何版本固定;它总是会下载最新版本的包。运行 本地 pypi 服务器。 used
pypiserver
anddevpi
.pypiserver
is super simple to install and setup;devpi
takes a bit more finagling. They both do the same thing - act as a proxy/cache for the real pypi and as a local pypi server for any home-grown packages.localshop
是我看的时候没有的新的,也是这个思路。所以它的工作原理是您的 internet-restricted 机器将连接到这些服务器,然后它们连接到 Internet 以便它们可以缓存和代理实际的存储库。
第二种方法的问题在于,尽管您获得了最大的兼容性并可以访问 Python 软件包的整个存储库,但您仍然需要确保 any/all 依赖项已安装在目标计算机上(例如,任何 headers 用于数据库驱动程序和构建工具链)。此外,这些解决方案不适合 non-pypi 存储库(例如,托管在 github 上的包)。
尽管我们对第二个选项已经走得很远,所以我肯定会推荐它。
最终,厌倦了处理兼容性问题和库,我们将整个服务器群迁移到商业支持的 docker 容器。
这意味着我们运送所有东西 pre-configured,实际上不需要在生产机器上安装任何东西,这对我们来说是最 headache-free 的解决方案。
我们用本地 docker 图像服务器替换了 pypi 存储库。
如果你想从 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
这不是答案。我很挣扎,但后来意识到我的安装正在尝试连接到互联网以下载依赖项。
所以,我先下载并安装依赖项,然后使用以下命令安装。成功了
python -m pip install filename.tar.gz
您可以从 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