如何配置Poetry实现开发时安装本地包、其他用户使用时从PyPI安装包
如何配置Poetry实现开发时安装本地包、其他用户使用时从PyPI安装包
嘿,我来帮你搞定这个Poetry配置的问题!你想要实现开发环境用本地包、其他用户用PyPI包的思路是对的,但原来的配置因为混合了两种依赖声明方式,导致解析逻辑出了点小问题,我给你调整成靠谱的方案。
先说说你原来配置的问题:你把PyPI依赖写在PEP 621规范的[project]区块,本地包又写在Poetry传统的[tool.poetry.dependencies]区块,这种混合写法容易让依赖解析逻辑“打架”,导致localdev环境下没触发本地包的安装。
直接给你能用的正确配置:
[project] name = "your-main-project" # 替换成你的主项目名称 version = "0.1.0" # 替换成你的主项目版本 dynamic = ["dependencies"] [tool.poetry.dependencies] python = "^3.8" # 替换成你的项目支持的Python版本 my-package = [ # 普通环境:从PyPI拉取指定版本的包 { version = ">=0.0.1", markers = "extra != 'localdev'" }, # 开发环境:安装本地包,开启开发模式(修改本地包代码直接生效) { path = "../my-package", develop = true, markers = "extra == 'localdev'" } ]
再给你说下具体怎么用:
- 其他用户(或者你不需要本地开发时),直接运行:
这时候Poetry会根据poetry installmarkers = "extra != 'localdev'"的规则,自动从PyPI拉取my-package>=0.0.1的包。 - 你自己开发需要用本地包时,运行:
这时候Poetry会触发poetry install --extras "localdev"markers = "extra == 'localdev'"的规则,忽略PyPI的包,转而安装../my-package路径下的本地包,而且develop = true会让本地包处于开发模式,你修改本地包的代码会直接在主项目里生效,不用反复重新安装。
如果想要更清晰地标识localdev这个额外环境,也可以加上下面的配置(不影响功能,但可读性更好):
[project.optional-dependencies] localdev = []
这样配置就完全符合你的需求啦,既解决了开发环境用本地包的问题,也能让其他用户正常从PyPI安装依赖。
备注:内容来源于stack exchange,提问作者Лаврентий Наумов
相关产品推荐
相关产品推荐

