Pytest导入错误问题:找不到utility模块
解决同目录模块导入报错问题
针对你遇到的ModuleNotFoundError: No module named 'utility'问题,即使添加了__init__.py仍未解决,这里提供几种可行方案:
方案1:使用相对导入
在test_app.py中用相对路径导入同目录的utility.py:
# 导入整个utility模块 from . import utility # 或者导入模块里的特定函数/类 from .utility import target_function
⚠️ 注意:如果直接通过python test_app.py运行脚本,这种相对导入会失效——因为此时脚本被当作独立的顶层模块,而非tests.uploders包的一部分。
方案2:手动添加模块路径到Python搜索路径
在test_app.py的最开头添加以下代码,将当前脚本所在目录加入Python的模块搜索路径:
import sys import os # 获取当前脚本所在目录的绝对路径 current_dir = os.path.dirname(os.path.abspath(__file__)) # 将该目录加入sys.path sys.path.append(current_dir) # 现在可以正常导入utility import utility
这种方法不受运行方式限制,无论直接运行脚本还是从其他地方调用都能生效。
方案3:从项目根目录运行测试(推荐)
打开终端,切换到repo目录(项目根目录),然后用模块方式运行测试脚本:
python -m tests.uploders.test_app
这种运行方式会自动将项目根目录加入Python的模块搜索路径,此时你既可以用相对导入,也可以用绝对导入:
# 绝对导入方式 from tests.uploders import utility
为什么加了__init__.py还是报错?
__init__.py的作用是让Python将该目录识别为一个包,但如果你的运行方式不对(比如直接在uploders目录下运行test_app.py),Python不会把uploders当作包的一部分,自然无法通过相对或包路径找到模块。从项目根目录用模块方式运行,是最符合Python包结构规范的做法。
内容的提问来源于stack exchange,提问作者Komal Rumade
相关产品推荐
相关产品推荐

