pip包中跨测试模块复用测试文件的__init__.py放置方案
解决方案
1. 根目录禁止添加__init__.py
你的项目根目录Projectname/只是项目容器,绝对不能加__init__.py——一旦添加,Python会把它识别为Python包,导致你导入Projectname.somefile时,会去根目录查找而非src/Projectname/下的实际包内容,直接引发导入错误。
2. 测试模块间复用代码的两种可行方式
方式一:用相对导入实现测试代码复用
在需要导入其他测试模块的文件中,使用相对路径导入。比如在tests/another_testfolder/test_two.py中导入test_one.py的类:
from ..some_testfolder.test_one import BaseTestCase, TestCaseOne
注意:这种方式必须用python -m pytest或python -m unittest的方式运行测试,不能直接执行单个测试文件(比如python test_two.py),否则会触发相对导入的语法错误。
方式二:将项目根目录加入Python路径
如果不想用相对导入,或者需要直接运行单个测试文件,可以在测试文件开头添加以下代码,把项目根目录加入sys.path:
import sys from pathlib import Path # 获取项目根目录的绝对路径 project_root = Path(__file__).parent.parent.parent sys.path.append(str(project_root)) # 直接导入测试模块 from tests.some_testfolder.test_one import BaseTestCase, TestCaseOne # 同时不影响pip包的正常导入 from Projectname.somefile import your_function
3. 确保pip包导入逻辑正常
只要你通过pip install -e .(开发模式)安装了包,或者把src/目录加入了sys.path,就能正常使用from Projectname.somefile import ...的方式导入包内代码,和测试模块的导入逻辑互不干扰。
4. 推荐的测试运行方式
进入项目根目录Projectname/,执行以下命令运行测试:
python -m pytest tests/ # 或者用unittest python -m unittest discover tests/
这种方式既能保证测试模块间的导入正常,也不会破坏pip包的导入逻辑。
内容的提问来源于stack exchange,提问作者a.t.
相关产品推荐
相关产品推荐

