Python编译程序导入报错:找不到Token模块问题求助
解决Python模块导入错误的方案
你的问题出在模块导入路径的解析逻辑上:当直接运行Tokenizer的测试时,Python的工作目录是Tokenizer文件夹,所以from Token import *能找到同目录的Token.py;但当Parser导入Tokenizer时,Python的搜索路径是基于mainProject或运行parser_test.py的目录,此时找不到名为Token的顶层模块,就会报错。
下面是三种可行的解决方法:
方法一:使用相对导入(推荐)
修改Tokenizer/Tokenizer.py中的导入语句,改为相对导入,明确指定Token是当前包内的模块:
from .Token import *
这种方式不受运行目录影响,不管是直接运行Tokenizer的测试,还是被其他模块导入,都能正确找到依赖的Token模块。
方法二:将mainProject加入Python路径
在Parser/parser_test.py的开头添加代码,手动把mainProject目录加入Python的模块搜索路径:
import sys import os # 获取mainProject目录的绝对路径 main_project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) if main_project_path not in sys.path: sys.path.append(main_project_path)
这样Python就能识别Tokenizer和Parser作为顶层包,Tokenizer.py中的导入语句也能被正确解析。
方法三:以模块方式运行测试
切换到mainProject目录下,用Python的模块运行方式执行测试脚本:
python -m Parser.parser_test
这种方式会自动把mainProject设为模块搜索的根目录,配合方法一的相对导入,就能彻底解决路径问题。
内容的提问来源于stack exchange,提问作者cokkiePlay
相关产品推荐
相关产品推荐

