如何在GitHub Actions中让单元测试找到src目录下的Python包
GitHub Actions中Python单元测试找不到src目录包的解决方法
问题详情
在GitHub Actions中运行Python库单元测试时出现ModuleNotFoundError,报错信息:
Hint: make sure your test modules/packages have valid Python names. Traceback: /opt/hostedtoolcache/Python/3.11.7/x64/lib/python3.11/importlib/__init__.py:126: in import_module return _bootstrap._gcd_import(name[level:], package, level) test/foo_test.py:11: in <module> from mylib import Foo E ModuleNotFoundError: No module named 'mylib'
项目目录结构:
my_project/ |-- src/ | |-- mylib/ | |-- __init__.py | |-- foo.py | |-- tests/ | |-- test_mylib.py (imports mylib.foo.Foo) no src prefix | |-- setup.py
setup.py配置片段:
packages=find_packages(where='src'), package_dir={'': 'src'},
已尝试创建pytest.ini并设置srcpaths = src,但问题未解决,需求是无需修改测试文件的导入前缀即可正常执行测试。
可行解决方案
1. 安装项目的可编辑版本
在GitHub Actions的测试步骤中,先执行安装命令:
pip install -e .
该命令会将src目录下的包以可编辑模式安装到Python环境,让测试代码能直接识别mylib包,和本地PyCharm的运行环境保持一致。
2. 临时设置PYTHONPATH环境变量
在运行pytest前,将src目录添加到Python的模块搜索路径中:
PYTHONPATH=$(pwd)/src pytest tests/
或者分两步执行:
export PYTHONPATH="$PYTHONPATH:$(pwd)/src" pytest tests/
3. 修正pytest配置文件
将pytest.ini中的配置替换为:
[pytest] pythonpath = src
注意:旧版本pytest的srcpaths参数已被弃用,新版本需使用pythonpath来指定额外的模块搜索目录。
内容的提问来源于stack exchange,提问作者AppDeveloper
相关产品推荐
相关产品推荐

