pytest项目结构配置问题:tests目录导入package模块失败
解决方案与最佳实践
问题根源
Python的模块搜索路径未包含你的项目根目录,导致无法找到package模块。下面是几种可行的配置方案,按推荐程度排序:
1. 标准Python包方式(推荐最佳实践)
通过将package安装为可编辑模式,让Python全局能识别该模块,同时支持代码实时修改无需重新安装:
- 在项目根目录(
/home/o*********/Sandbox/test-python)创建pyproject.toml文件,内容如下:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "package" version = "0.1.0"
- 执行命令安装可编辑包:
pip install -e .
之后无论从哪个目录运行pytest,都能正常导入package.lib中的函数。
2. 临时添加项目路径到Python环境
适合快速测试,无需额外配置文件:
- 直接在运行pytest时指定PYTHONPATH:
PYTHONPATH=/home/o*********/Sandbox/test-python pytest tests/
或者先设置环境变量再运行:
export PYTHONPATH=/home/o*********/Sandbox/test-python pytest
3. 利用pytest的conftest.py自动配置路径
在tests目录下创建conftest.py文件,内容如下,pytest运行时会自动加载该文件并将项目根目录加入搜索路径:
import sys from pathlib import Path # 获取项目根目录(tests文件夹的父目录) root_dir = Path(__file__).parent.parent sys.path.append(str(root_dir))
之后直接运行pytest即可正常导入模块。
额外注意事项
- 确保
package目录下存在__init__.py文件(Python 3.3+虽支持无此文件的命名空间包,但添加后更明确,兼容性更好) - 测试文件中的导入语句保持
from package.lib import sum不变
内容的提问来源于stack exchange,提问作者optimusfrenk
相关产品推荐
相关产品推荐

