如何在dh_virtualenv中使用本地仓库构建含setup_requires的pip包
解决离线构建中setup_requires依赖的本地仓库配置方案
针对你遇到的setup_requires依赖无法被dh_virtualenv管控,且离线构建无法访问PyPI的问题,我们可以通过强制easy_install指向本地仓库来解决,具体步骤如下:
提前准备本地PyPI仓库
先在有网络的环境中,把项目依赖的jira、PyNaCl及其所有嵌套依赖包下载到本地目录(比如/opt/local-pypi):pip download -d /opt/local-pypi jira PyNaCl --no-binary :all: # 下载源码包确保跨平台兼容然后用pip生成标准的PyPI simple索引结构,方便easy_install识别:
pip index generate --directory /opt/local-pypi把这个目录拷贝到你的mini-buildd构建环境中(比如挂载到构建容器,或者同步到构建节点)。
配置easy_install指向本地仓库
有两种方式让easy_install优先使用本地仓库:- 临时环境变量(适合构建脚本中使用)
在触发构建前,设置EASY_INSTALL_OPTIONS环境变量,让easy_install加载本地仓库:
可以把这行加到你的export EASY_INSTALL_OPTIONS="-f file:///opt/local-pypi --index-url file:///opt/local-pypi/simple"debian/rules脚本里,放在dh_virtualenv执行命令之前。 - 持久化配置文件
如果需要在构建环境中全局生效,创建或修改/etc/pydistutils.cfg文件:
这样所有的easy_install调用都会默认使用本地仓库,不会去访问PyPI。[easy_install] find_links = file:///opt/local-pypi index_url = file:///opt/local-pypi/simple
- 临时环境变量(适合构建脚本中使用)
适配mini-buildd构建流程
确保mini-buildd的构建工作目录能访问到本地仓库路径:- 如果是用容器构建,需要把本地仓库目录挂载到容器内的对应路径(比如
/opt/local-pypi); - 如果是物理节点构建,直接把仓库目录放到构建用户可访问的路径下即可。
另外,因为dh_virtualenv不会处理setup_requires阶段的依赖,所以必须让setup.py执行时的easy_install能通过上述配置拿到本地包,才能顺利完成前置依赖安装。
- 如果是用容器构建,需要把本地仓库目录挂载到容器内的对应路径(比如
验证构建流程
触发构建前,可以先手动测试easy_install是否能从本地仓库获取包:easy_install --dry-run jira如果输出显示从本地仓库查找包,说明配置生效,再正式执行构建即可。
内容的提问来源于stack exchange,提问作者user2563336
相关产品推荐
相关产品推荐

