使用uv tool run pytest运行测试时的导入路径与依赖问题求助
使用uv tool run pytest运行测试时的导入路径与依赖问题求助
嘿,我来帮你搞定这两个用uv和pytest时碰到的问题,都是Python项目结构和环境配置里的常见小坑,咱们一步步来解决:
一、导入路径问题:让测试能找到src里的模块
你说装了可编辑安装(uv pip install --editable ./)但还是导不了模块,核心原因是你的pyproject.toml没正确告诉Python你的代码包在src目录里。
解决步骤:
- 打开项目根目录的
pyproject.toml,补充或修改[project]部分的包配置:
[project] name = "你的项目名称" # 随便填个名字,比如my-project version = "0.1.0" # 关键配置:指定代码包来自src目录 packages = [{path = "src"}]
- 重新运行可编辑安装命令:
uv pip install --editable ./
这时候Python就会把src目录加入到模块搜索路径里,你在test_file1.py里用from file1 import Class1就能正常导入了,不用加src.前缀。
二、依赖解析问题:让pytest能找到tensorflow等依赖
你碰到的ModuleNotFoundError是因为uv tool run pytest默认会在一个隔离的工具环境里运行,这个环境不会自动继承你项目里安装的依赖。
推荐解决方法(更符合uv的使用逻辑):
放弃用uv tool run pytest,改用uv run pytest,步骤如下:
- 把pytest添加为项目的开发依赖:
uv add --dev pytest
- 同步项目环境(确保所有依赖都安装到位):
uv sync
- 现在直接在项目根目录运行:
uv run pytest
这样pytest就会在你的项目专属环境里执行,自然能找到tensorflow这些依赖了。
如果你坚持想用uv tool run pytest:
那需要把项目依赖也安装到pytest的工具环境里,但这种方式不够优雅,步骤是:
# 把requirements.txt里的依赖安装到工具环境 uv tool install --requirement requirements.txt pytest # 再运行测试 uv tool run pytest
但还是更推荐用uv run的方式,因为它能保证测试环境和你的开发环境完全一致。
额外小提示
如果你的项目依赖主要在requirements.txt里,也可以把它关联到pyproject.toml,这样用uv sync就能自动同步:
[tool.uv] requirements = ["requirements.txt"]
之后运行uv sync就会自动安装requirements.txt里的所有依赖,不用再单独跑uv pip install -r了。
备注:内容来源于stack exchange,提问作者Della
相关产品推荐
相关产品推荐

