如何在同一pyproject.toml文件中为同一内部依赖同时配置本地路径与私有索引源以适配开发和生产环境?
如何在同一pyproject.toml文件中为同一内部依赖同时配置本地路径与私有索引源以适配开发和生产环境?
嗨,这个需求完全可以实现!UV支持通过环境变量驱动的条件源配置来搞定这个场景,不用修改pyproject.toml就能让开发和生产环境自动适配对应的依赖源。下面给你具体的实现方案:
核心方案:使用环境变量标记区分环境
我们可以利用UV的marker特性(和你了解到的平台适配逻辑类似),通过环境变量让UV自动选择对应的依赖源:
[project] # 保留你原有的项目配置及其他依赖 dependencies = [] [tool.uv.sources] my-lib = [ # 开发环境:当DEV_MODE环境变量为true时,使用本地路径 { path = "../my_lib", marker = "env('DEV_MODE') == 'true'" }, # 生产环境:默认使用私有索引(无需设置DEV_MODE) { index = "my-lib-index", marker = "not env('DEV_MODE') == 'true'" } ] [[tool.uv.index]] name = "my-lib-index" url = "https://our.own.index" explicit = true
具体使用说明:
- 开发环境:开发者只需要在本地终端设置环境变量后执行依赖安装即可:
- Linux/macOS:
export DEV_MODE=true && uv sync - Windows(PowerShell):
$env:DEV_MODE = "true"; uv sync
这样UV会自动匹配本地路径的依赖源,和你之前单独配置path的效果完全一致。
- Linux/macOS:
- 生产环境:不需要设置任何额外环境变量,直接执行
uv sync,UV就会自动选择私有索引的源,和你单独配置index的效果一致。
补充细节
- 你设置的
explicit = true依然会正常生效:只有my-lib会使用私有索引,其他依赖还是从PyPI拉取,不会受影响。 - 如果你想让开发者的环境变量设置更持久,可以让他们把
export DEV_MODE=true添加到~/.bashrc、~/.zshrc(Linux/macOS)或者PowerShell的配置文件中,避免每次手动设置。 - 这个配置完全满足「开发和生产共用同一
pyproject.toml」的需求,两边都不需要修改配置文件。
备注:内容来源于stack exchange,提问作者Martijn Kamstra
相关产品推荐
相关产品推荐

