ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何在 Poetry 项目中配置 tox 运行测试?

如何在 Poetry 项目中配置 tox 运行测试? 如何在 Poetry 项目中配置 tox 运行测试【免费下载链接】poetryPython packaging and dependency management made easy项目地址: https://gitcode.com/GitHub_Trending/po/poetry如果你在一个由 Poetry 管理的 Python 项目中想用 tox 跑测试比如为多个 Python 环境准备独立的测试会话Poetry 官方文档确认这个组合是受支持的只要使用tox 4即可与 Poetry 提供的 PEP 517 构建系统配合工作。如果使用 tox 3则必须设置 tox 的isolated_build选项。本文按照官方 FAQ 中 Is tox supported? 一节的配置方式展开先确保pyproject.toml的构建后端声明正确再从三种 tox 配置中挑选符合你测试目标的一种最后处理凭据转发这个已知坑。确认 pyproject.toml 声明了 PEP 517 构建系统tox 依赖 PEP 517 构建流程来打包你的项目因此pyproject.toml中必须存在build-system段。如果项目是用poetry new或poetry init创建的这一段通常已经自动加入见 pyproject.md 的 Poetry and PEP-517 一节。按 FAQ 给出的配置该段应为[build-system] requires [poetry-core1.0.0] build-backend poetry.core.masonry.api两个来自文档的注意事项如果你的pyproject.toml仍然把poetry直接写为 build backend应改为引用poetry-core。版本写法上存在文档差异FAQ 的 tox 一节使用poetry-core1.0.0而仓库其他文档如 basic-usage.md、libraries.md中的示例使用poetry-core2.0.0,3.0.0。两者都是文档中出现的写法可按你项目使用的 Poetry 版本核对本文不自行统一。选择一种 tox 配置tox 可以有多种配置方式区别在于被测代码是什么以及哪些依赖被安装。文档给出了三个用例它们是三条互斥的替代路径选其中一种写入你的tox.ini或等效配置文件不要同时套用。用例 #1由 pip 安装 sdist依赖由 pip 解析[tox] [testenv] deps pytest commands pytest tests/ --import-mode importlib按文档描述tox 会为项目构建一个sdist包并用pip安装到一个全新环境依赖由pip解析。这是最直接的配置适合希望测试针对打包后的项目运行的情况。用例 #2pip 安装后用 Poetry 同步锁定版本[tox] [testenv] allowlist_externals poetry commands_pre poetry install --no-root --sync commands poetry run pytest tests/ --import-mode importlib在这种方式下tox 同样会构建sdist并用pip安装到全新环境随后执行poetry install --no-root --sync把poetry.lock中锁定的依赖安装进同一个环境再用poetry run pytest tests/ --import-mode importlib跑测试。适合希望最终生效的依赖版本严格来自 lock 文件的场景。用例 #3跳过安装测试针对本地文件[tox] [testenv] skip_install true allowlist_externals poetry commands_pre poetry install commands poetry run pytest tests/ --import-mode importlib设置skip_install true后tox 不做任何安装改由poetry install安装全部依赖并以可编辑editable模式安装当前包。文档明确说明此时测试运行针对的是本地文件而不是构建并安装后的包。运行并核对行为配置完成后在项目根目录运行tox。可核对的行为以各用例的文档描述为准用例 #1 与 #2tox 先构建sdist并用pip安装到全新环境用例 #2 额外执行poetry install --no-root --sync然后执行配置中的commands即pytest tests/ --import-mode importlib用例 #3tox 不执行安装poetry install安装依赖和可编辑模式的项目包后执行测试。测试是否通过以 tox 输出中 pytest 的结果为准文档未给出固定的输出样例这里不预设具体数值。已知问题tox 环境里凭据不可用tox 默认不转发当前 shell 的环境变量。如果你的凭据配置在系统 keyringLinux或通过环境变量提供Poetry 在 tox 环境中可能无法安装依赖。文档给出的处理方式是使用 tox 的passenv配置项显式转发所需变量或写passenv *转发全部变量Linux 系统上访问系统 keyring 可能还需要转发DBUS_SESSION_BUS_ADDRESS变量具体因桌面环境而异另一个选择是完全禁用 keyringpoetry config keyring.enabled false注意文档给出的两个限制该设置会让 Poetry 把密码写入明文的配置文件并且修改该设置后需要重新配置凭据。可选把 tox 本身作为 dev 组依赖管理如果你想让 Poetry 顺便管理 tox 这个工具managing-dependencies.md 的分组示例展示了把tox *放入dev组与test、lint组并列的写法添加组依赖的通用命令是poetry add 依赖 --group 组名组不存在时会自动创建。默认情况下poetry install会安装所有非 optional 组的依赖。这一步与上面三种 tox 配置相互独立属于可选分支不影响 tox 配置本身。小结与限制支持的前提是tox 4tox 3 需要isolated_build选项且pyproject.toml存在指向poetry-core的build-system段三种用例按依赖由谁解析、测试针对构建产物还是本地文件来选只能取其一凭据问题出现在 tox 环境中无法访问 keyring/环境变量时用passenv转发或禁用 keyring禁用 keyring 要接受明文存储与重新配置凭据的代价。【免费下载链接】poetryPython packaging and dependency management made easy项目地址: https://gitcode.com/GitHub_Trending/po/poetry创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表