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

Tox运行测试无法识别Poetry配置的本地相对路径依赖问题

问题:Tox无法识别Poetry配置的本地相对路径依赖

项目结构

py/
├─ projects/
│  ├─ project1/
│  │  ├─ ...
│  │  ├─ pyproject.toml
│  │  ├─ tox.ini
├─ libs/
│  ├─ lib1/
│  │  ├─ ...
│  │  ├─ pyproject.toml

现有配置

  • py/projects/project1/pyproject.toml 依赖配置:
[tool.poetry.dependencies]
...
lib1 = {path = "../../libs/lib1" }
  • py/projects/project1/tox.ini 测试配置:
[tox]
isolated_build = True
envlist = py3
minversion = 3.24.4
requires = setuptools >= 60.1.0

[testenv]
whitelist_externals = poetry
commands =
    poetry install -v
    poetry run pytest -vvv

报错现象

日常开发运行功能正常,在project1目录执行poetry run tox触发测试流程时失败,核心报错信息:

ValueError: Directory ../../libs/lib1 does not exist

报错发生在tox构建项目元数据的阶段,提示找不到指定的本地依赖目录。


问题根因

本地开发执行poetry命令时,工作目录是py/projects/project1,../../libs/lib1这个相对路径会基于当前工作目录解析,可以正确定位到lib1的位置,所以流程正常。
tox默认开启isolated_build时,会先将当前项目打包为sdist源码包存放到.tox/.tmp/package/临时构建目录,后续所有依赖解析、安装操作都基于这个临时目录执行。此时解析pyproject.toml里的相对路径时,基准目录变成了深层的临时文件夹,向上两级根本找不到py目录下的libs文件夹,直接触发路径不存在的错误。


解决方案

直接修改tox.ini配置,跳过tox默认的打包安装步骤即可——你已经用poetry全权负责依赖管理和环境操作,不需要tox额外执行打包、安装项目的流程。
修改后的tox.ini内容如下,核心是新增skip_pkg_install配置:

[tox]
isolated_build = True
envlist = py3
minversion = 3.24.4
requires = setuptools >= 60.1.0

[testenv]
skip_pkg_install = True  # 跳过tox默认的sdist打包、安装逻辑
whitelist_externals = poetry
commands =
    poetry install -v
    poetry run pytest -vvv

配置修改后,tox会直接在tox.ini所在的project1源码目录执行后续poetry命令,相对路径可以正确解析,本地依赖lib1就能被正常识别安装。

注意:tox默认会将命令执行的工作目录设置为tox.ini所在目录,不需要额外调整路径配置。


内容的提问来源于stack exchange,提问作者A.B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:15:38