Python中从子包导入模块时出现ModuleNotFoundError问题求助
解决Python项目测试文件的模块导入问题
针对你遇到的test.py无法导入functions模块的问题,给你几个可行的解决办法:
方法1:以包的形式运行测试文件
在项目根目录(projectX)的上级目录下,执行以下命令运行test.py:
python -m projectX.test.test
这种方式会让Python把projectX当作完整包识别,此时test.py里直接用from functions.hello import greet就能正常导入,和main.py的写法一致。
方法2:修改sys.path指向项目根目录
在test.py最开头添加以下代码,把projectX目录加入Python的模块搜索路径:
import os import sys # 获取projectX目录的绝对路径 project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 把项目根目录插入到sys.path最前面,确保优先搜索这里的模块 sys.path.insert(0, project_root) from functions.hello import greet
你之前用sys.path.append可能因路径优先级问题没生效,insert(0)能保证项目根目录的模块被优先找到。
方法3:用相对导入并以包模块运行
如果想用相对导入from ..functions.hello import greet,需要在projectX目录下执行命令:
python -m test.test
此时Python会将test目录识别为projectX包的子包,相对导入的父包关系成立,不会再报"no known parent package"错误。
补充说明
直接双击或用python test/test.py运行test.py时,它被当作独立顶级脚本而非项目包的一部分,这就是相对导入失败、绝对导入找不到模块的核心原因——Python此时的模块搜索路径不包含projectX目录。
内容的提问来源于stack exchange,提问作者DigitalTemplar
相关产品推荐
相关产品推荐

