如何在pyproject.toml中为外部依赖设置版本约束而非指定具体版本?
解决方案分两种情况处理
一、针对blpapi(有私有PyPI索引的场景)
彭博提供了专用的PyPI索引地址,你不需要硬编码具体的WHL链接,直接在pyproject.toml里指定版本约束+私有索引即可,步骤如下:
- 在
[project]区块的dependencies中正常定义版本约束:
[project] dependencies = [ "blpapi >= 3.23.0, < 4", ]
- 添加
[tool.pip]区块指定私有索引地址,让pip从该索引查找符合约束的包:
[tool.pip] extra-index-url = ["https://bcms.bloomberg.com/pip/simple"]
执行pip install .时,pip会自动从彭博的私有索引拉取满足版本范围的最新blpapi包,和使用PyPI公共包的体验完全一致。
二、针对内部业务包A(仅托管WHL文件、无PyPI索引的场景)
因为没有索引服务提供版本查询能力,直接在pyproject.toml里写版本约束+WHL URL的方式不可行,推荐两种方案:
方案1:搭建内部私有PyPI索引(最优解)
用轻量工具(比如devpi或pypiserver)搭建一个内部索引,把包A的所有版本WHL上传上去。之后就可以参照blpapi的方式,在pyproject.toml里指定索引地址+版本约束,完全复用公共PyPI的依赖管理逻辑。
方案2:用requirements.txt配合--find-links实现版本约束
如果暂时不想搭建索引,可以通过引用外部requirements文件的方式实现:
- 在项目根目录创建
requirements-a.txt文件,内容如下:
A >= 4.2.1 --find-links=https://url-for-A/
注意:确保
https://url-for-A/是可以直接访问的目录,且目录下有自动生成的文件列表(比如Apache/Nginx默认的目录索引),这样pip才能扫描到所有WHL文件并解析版本号。
- 在
pyproject.toml的dependencies中引用这个requirements文件:
[project] dependencies = [ "-r requirements-a.txt", ]
执行pip install .时,pip会扫描指定目录下的所有包A的WHL,自动选择满足>=4.2.1约束的最新版本。
内容的提问来源于stack exchange,提问作者add_subtract
相关产品推荐
相关产品推荐

