求助:解决Python中ModuleNotFoundError(找不到mainfunction模块)问题
解决ModuleNotFoundError: No module named 'mainfunction'问题
问题根源
你的项目结构中,mainfunction.py位于项目根目录,而测试文件tests_app.py在tests子目录下。Python默认只会把当前运行脚本所在目录加入模块搜索路径,因此无法找到上层目录的mainfunction模块。
具体解决方案
方案1:修改导入语句并将项目转为可导入包
- 在项目根目录下创建空文件
__init__.py,将项目标记为Python可导入包。 - 修改
tests/tests_app.py中的导入语句为相对导入:
from ..mainfunction import *
- 从项目根目录的上层目录执行pytest:
cd path/to/directory-containing-project pytest project/tests/tests_app.py
方案2:动态添加项目根目录到模块搜索路径
在tests/tests_app.py的最开头添加以下代码,手动将项目根目录加入Python的模块搜索路径:
import sys import os # 获取当前脚本所在目录的上层目录(即项目根目录) sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) from mainfunction import *
修改后,无论你在VSCode中直接运行测试文件,还是在项目根目录下执行pytest命令,都能正常找到mainfunction模块。
方案3:设置PYTHONPATH环境变量
在终端中先将项目根目录添加到PYTHONPATH,再运行测试:
- Windows命令行:
set PYTHONPATH=C:\magang\bimbingan\pak roly\zaky-function-main pytest tests/tests_app.py
- Linux/macOS终端:
export PYTHONPATH=/path/to/zaky-function-main pytest tests/tests_app.py
额外提示
你的mainfunction.py中存在两个同名的test_add函数,这会导致pytest运行时出现警告,建议修改其中一个函数名(例如改为test_add_parametrized),避免冲突。
内容的提问来源于stack exchange,提问作者Zakymuhammadyusuf
相关产品推荐
相关产品推荐

