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

如何根据nox使用的Python版本通过poetry安装不同本地依赖包

解决Nox多Python版本测试时匹配对应本地依赖包的问题

不建议直接修改pyproject.toml(多会话并行时易引发文件冲突,还会污染本地工作目录),推荐以下两种安全可行的方案:

方案1:在Nox会话中动态安装对应版本的本地包

绕过Poetry的固定依赖配置,手动根据当前测试的Python版本选择匹配的.whl文件安装:

修改noxfile.py如下:

@nox.session(python=["3.10", "3.9"])
def tests(session) -> None:
    """Run the test suite."""
    # 先安装除目标本地包外的所有依赖
    session.run("poetry", "install", "--without", "local-package", external=True)
    # 从会话Python版本中提取版本号后缀,匹配本地包文件名
    py_minor_ver = session.python.split(".")[1]
    local_package_path = f"local_package_py3{py_minor_ver}.whl"
    # 用pip安装对应版本的本地包
    session.run("pip", "install", local_package_path, external=True)
    # 执行测试
    session.run("pytest")

前提:需在pyproject.toml中将该本地包归类到单独依赖组(比如[tool.poetry.group.local-package.dependencies]),方便用--without参数跳过安装。如果Poetry版本支持,也可直接用--exclude参数指定跳过该包;嫌麻烦的话,也可以先执行完整的poetry install,再用pip install覆盖安装对应版本的本地包(会有警告但不影响功能)。

方案2:使用Poetry的条件依赖配置

直接在pyproject.toml中通过Python版本条件指定对应依赖包,让Poetry自动匹配安装:

[tool.poetry.dependencies]
python = "^3.9 || ^3.10"
local-package = [
    { file = "local_package_py310.whl", python = ">=3.10,<3.11" },
    { file = "local_package_py39.whl", python = ">=3.9,<3.10" }
]

配置完成后,原Nox会话代码无需修改,session.run("poetry", "install", external=True)会根据当前Python版本自动选择对应的.whl文件安装。

注意:该方案要求Poetry版本≥1.2,因为1.2版本才正式支持条件依赖特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:21:34