当前位置 : 主页 > 手机开发 > 其它 >

使用依赖项打包python项目的标准方法是什么?

来源:互联网 收集:自由互联 发布时间:2021-06-22
我有一个 python项目,有一些依赖项(在setup.py中的install_requires下定义).我的操作人员需要一个自包含的包,只依赖于python安装.石蕊测试将是他们能够获得一个zip文件然后解压缩并运行它而无
我有一个 python项目,有一些依赖项(在setup.py中的install_requires下定义).我的操作人员需要一个自包含的包,只依赖于python安装.石蕊测试将是他们能够获得一个zip文件然后解压缩并运行它而无需连接互联网.

是否有一种简单的方法来打包包含依赖项的安装?如果我必须构建最终将运行的OS /体系结构,这是可以接受的.

为了它的价值,我已经尝试了setup.py build和setup.py sdist,但它们似乎不符合要求,因为它们不包含依赖项.我也考虑过virtualenv(如果绝对必要的话可以安装),但它有硬编码路径,这使得它不太理想.

pip如何工作有一些细微差别.不幸的是,如果将任何依赖项或依赖项的依赖项安装到pip可以找到它们的地方,使用–prefix vendor来存储项目的所有依赖项都不起作用.它将跳过这些依赖项,并将其余部分安装到您的供应商文件夹中.

在过去,我使用virtualenv的–no-site-packages选项来解决这个问题.在一家公司,我们将发送整个virtualenv,其中包括python二进制文件.为了只运送依赖项,您可以使用virtualenv和pip上的–prefix开关组合,为自己提供一个安装到正确位置的干净环境.

我将提供一个示例脚本,用于创建临时virtualenv,激活它,然后将依赖项安装到本地供应商文件夹.如果您在CI中运行,这很方便.

#!/bin/bash

tempdir=$(mktemp -d -t project.XXX) # create a temporary directory
trap "rm -rf $tempdir" EXIT         # ensure it is cleaned up
# create the virtualenv and exclude packages outside of it
virtualenv --python=$(which python2.7) --no-site-packages $tempdir/venv
# activate the virtualenv
source $tempdir/venv/bin/activate    
# install the dependencies as above
pip install -r requirements.txt --prefix=vendor
网友评论