You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pip与tox忽略全路径依赖优先从PyPI查找匹配包的解决方案咨询

问题本质

python setup.py install 走的是setuptools的旧依赖解析逻辑,本身不支持PEP 508规范的URL直接依赖写法,而pip 19+已经完整支持PEP 508,所以会出现pip安装成功、直接调用setup.py安装失败的差异。另外python setup.py install命令本身已经被官方弃用,所有安装场景都建议统一使用pip install相关命令。

你观察到的tox安装时依赖顺序异常的问题,根因大概率是私有包proppkg的打包逻辑有问题:如果proppkg的setup.py在执行时直接导入了包内业务代码拿版本等元数据,而业务代码又依赖requests,就会出现依赖还没安装、setup.py执行就报错的情况,和依赖安装顺序无关。


优化方案

方案1:私有PyPI源(长期最优解)

如果公司内部有私有PyPI服务(如devpi、Artifactory、普通静态文件源等),优先将私有包上传到内部源,既不用写复杂的URL依赖,也能完全避免和公网重名包的冲突:

  1. 在Docker镜像、本地开发环境、tox配置中配置pip索引优先级:
# /etc/pip.conf
[global]
index-url = https://site.mycompany.com/pypi/simple
extra-index-url = https://pypi.org/simple
trusted-host = site.mycompany.com
  1. setup.py中直接写版本依赖即可,适配所有安装场景:
install_requires=["requests", "proppkg==70.1.0"]

方案2:统一安装流程,适配PEP 508写法

如果暂时没有私有PyPI服务,保留现有PEP 508的URL依赖写法即可,只需要调整安装流程:

  1. 所有场景弃用python setup.py install,统一使用pip install .(生产安装)或pip install -e .(开发模式)安装包
  2. 调整tox配置,指定用pip安装、传递必要的pip参数:
[testenv]
install_command = python -m pip install {opts} {packages}
passenv = *
pip_args = --trusted-host site.mycompany.com

如果私有包的HTTPS证书是自签的,可以在pip_args中加--cert /path/to/rootCA.crt指定证书路径。


你当前的临时方案可以正常运行,只是如果有多环境部署需求的话,配置私有源的方案维护成本更低。

内容的提问来源于stack exchange,提问作者chrisinmtown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:48:03