Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在没有internet的情况下安装python包,并使用源代码.tar.gz和.whl_Python_Pip_Openstack - Fatal编程技术网

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

在没有internet的情况下安装python包,并使用源代码.tar.gz和.whl,python,pip,openstack,Python,Pip,Openstack,我们正在尝试在没有internet的情况下安装两个python包 For ex : python-keystoneclient 为此,我们从服务器下载了软件包并将其保存在服务器中 但是,在安装tar.gz和.whl软件包时,安装需要首先安装依赖的软件包。由于服务器中没有internet连接,因此服务器将失败 例如:对于python keysteneclient,我们有以下依赖包 stevedore (>=1.5.0) six (>=1.9.0) requests (>=2.5

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

For ex : python-keystoneclient
为此,我们从服务器下载了软件包并将其保存在服务器中

但是,在安装tar.gz和.whl软件包时,安装需要首先安装依赖的软件包。由于服务器中没有internet连接,因此服务器将失败

例如:对于python keysteneclient,我们有以下依赖包

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)
装卸工(>=1.5.0) 六个(>=1.9.0) 请求(>=2.5.2) 漂亮表(=0.7) oslo.utils(>=2.0.0) oslo.serialization(>=1.4.0) 奥斯陆18N(>=1.5.0) oslo.config(>=2.3.0) NetAddress(!=0.7.16,>=0.7.12) 债务人催收人(>=0.3.0) iso8601(>=0.1.9) 巴别塔(>=1.3) argparse pbr(=1.6) 当我尝试从上面的列表中逐个安装软件包时,它再次寻找嵌套的依赖项


我们是否可以列出安装python模块(如python KeysonClient)所需的所有依赖包

pipdeptree
是一个命令行实用程序,用于以依赖关系树的形式显示安装在virtualenv中的python包。 只要使用它:

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

在我可以访问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 dep,如下所示:

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

我们在工作中也有类似的情况,生产机器无法接入互联网;因此,所有内容都必须脱机和脱离主机进行管理

以下是我尝试过并取得了不同程度的成功:

  • 这是一个小型实用程序,您可以在连接internet的主机上运行。它不会尝试安装软件包,而是将其下载,以及需要安装到目录中的所有其他内容。然后将此目录移动到目标计算机上。优点:非常简单易用,没有服务器问题;没有要配置的端口。缺点:没有任何真正的止损点,但最大的一点是它不尊重你可能有的任何版本的钉住;它将始终下载软件包的最新版本

  • 运行本地pypi服务器。使用和
    pypiserver
    安装和设置非常简单<代码>devpi需要更多的欺骗。它们都做同样的事情——充当真实pypi的代理/缓存,以及任何自制包的本地pypi服务器。是一个新的,当我看的时候不在,它也有同样的想法。因此,它的工作原理是,您的受internet限制的计算机将连接到这些服务器,然后将它们连接到internet,以便它们可以缓存和代理实际的存储库

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

    不过,我们在第二种选择上走得很远,所以我绝对推荐它

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

    这意味着我们提供所有预先配置的产品,实际上不需要在生产机器上安装任何产品,这是我们最头痛的解决方案


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

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

    mkdir dependencies
    pip download -r requirements.txt -d "./dependencies"
    tar cvfz dependencies.tar.gz dependencies
    
    tar zxvf dependencies.tar.gz
    cd dependencies
    pip install * -f ./ --no-index
    
    并且,一旦您将dependencies.tar.gz传输到没有internet的机器上,您将执行以下操作:

    mkdir dependencies
    pip download -r requirements.txt -d "./dependencies"
    tar cvfz dependencies.tar.gz dependencies
    
    tar zxvf dependencies.tar.gz
    cd dependencies
    pip install * -f ./ --no-index
    

    这不是答案。我当时很挣扎,但后来意识到我的安装试图连接到internet以下载依赖项

    所以,我首先下载并安装了依赖项,然后使用下面的命令安装。它起作用了

    python -m pip install filename.tar.gz
    

    您可能会幸运地使用容器进行此操作。这可以通过pip的“下载”选项进行更新。此外,最好能解释一下pip选项“无索引”。你可以从这里得到一个轻量级的pip:@GianlucaD'Ardia——我还下载了一个
    pip
    wheel,你可以使用它自己和以下工具(trippy)安装它命令:
    python~/eggs/pip-9.0.1-py2.py3-none-any.whl/pip-install--no index~/eggs/pip-9.0.1-py2.py3-none-any.whl
    (将版本细节替换为控制盘的细节)添加一些细节:
    pip-install--help
    指出:(1)
    -f
    -查找链接
    的意思是
    …如果本地路径或文件://url是一个目录,那么在目录列表中查找存档文件。
    ,因此它在此处定位此目录中的文件;(2)
    --无索引
    意味着
    忽略包索引(只查看--改为查找链接URL)。
    因此
    pip install xxx.whl-f./--无索引
    意味着:在当前目录中查找安装文件,而不是在远程repo中搜索。如果我的本地计算机使用不同的平台怎么办?这种方法对我很有效,我只是觉得你不需要第二行的引号。Windows上有没有与*对应的?我在Windows工作站上收到一个错误,错误:无效要求:'*'。Windows没有tar,但您可以创建一个zip文件夹。如果不是从命令行,您可以使用典型的右键单击菜单制作一个zip。@DominikNovotný还有另一个答案:
    对于%x in(dir*.whl)do python-m pip install%x
    from。请注意,安装是按字母顺序进行的,一些依赖于尚未安装的库将失败。所以这个解决方案可以改进。或者你需要