Python跨目录导入遇ModuleNotFoundError:仅改测试文件,问题出在哪?
问题分析
你的问题出在Python的模块搜索路径机制上:
- 直接运行
src/get_ducks_for_justice.py时,Python会自动把该文件所在的src目录加入模块搜索列表sys.path,所以import config能找到同目录的config.py。 - 但从
tests目录运行duck_tester.py时,sys.path默认只包含tests目录。此时你以包的形式导入src下的模块,get_ducks_for_justice.py里的import config会去sys.path里找全局的config模块,而不是src目录下的那个,自然找不到,就抛出了ModuleNotFoundError。
仅修改duck_tester.py的解决办法
在duck_tester.py的所有导入语句之前,添加代码把src目录加入到模块搜索路径中:
import sys import os # 获取当前文件(duck_tester.py)的绝对路径所在目录 tests_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接root目录下的src路径,并转为绝对路径 src_path = os.path.abspath(os.path.join(tests_dir, '../src')) # 将src目录加入sys.path sys.path.append(src_path)
这样Python就能在搜索config模块时找到src目录下的config.py,解决导入报错的问题。
内容的提问来源于stack exchange,提问作者acolls_badger
相关产品推荐
相关产品推荐

