运行test.py报ModuleNotFoundError: No module named 'PyImgUtils'问题求解
问题根源
- 导入路径的解析上下文差异:直接运行
utils.py时,Python会自动将utils.py所在的Analyzer目录加入模块搜索路径sys.path,此时Analyzer目录下的ImgUtils包可以被直接识别。运行test.py时,Python自动加入sys.path的是test.py所在的myproject目录,utils.py中写的绝对导入会从myproject根目录下查找ImgUtils包,自然找不到对应模块。 - 你提到的「已添加ImgUtils.pyd路径到sys.path」大概率存在生效范围问题:如果是运行
utils.py时添加的路径,不会同步到运行test.py的进程中;如果是运行test.py时添加的,要确保添加的是Analyzer目录的绝对路径,且添加逻辑在导入utils之前执行。
解决方案
以下方案按推荐优先级排序:
方案1:使用相对导入(符合Python包开发规范)
修改utils.py的导入语句为包内相对导入:
# utils.py 修改后 from .ImgUtils.ImgUtils import PyImageUtils def my_test_function(): a = PyImageUtils.analyze() return a
注意:使用相对导入的模块不能直接作为顶层脚本运行,若需要单独测试
utils.py,请在myproject根目录下执行命令python -m Analyzer.utils。
方案2:使用完整层级的绝对导入
从项目根目录层级写全导入路径:
# utils.py 修改后 from Analyzer.ImgUtils.ImgUtils import PyImageUtils def my_test_function(): a = PyImageUtils.analyze() return a
修改后运行test.py可直接正常执行,若需要单独运行utils.py,请提前将myproject目录的绝对路径加入sys.path。
方案3:运行test.py时主动添加搜索路径
如果不想修改utils.py的现有代码,可以在test.py最开头添加路径,注意要放在导入utils之前执行:
# test.py 修改后 import sys from pathlib import Path # 将Analyzer目录加入模块搜索路径 sys.path.append(str(Path(__file__).parent / "Analyzer")) from Analyzer import utils print(utils.my_test_function())
方案4:永久配置搜索路径
将Analyzer目录的绝对路径添加到系统环境变量PYTHONPATH中,配置完成后所有Python进程都可以直接识别对应路径下的模块。
内容的提问来源于stack exchange,提问作者protonpasta
相关产品推荐
相关产品推荐

