You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 18:35:16