Python中模块已存在却报ModuleNotFoundError的问题求助
模块导入错误解决方案
问题原因
直接运行step_2_my_hand/app.py时,Python会自动把当前文件所在目录(step_2_my_hand)加入模块搜索路径sys.path,所以能找到同目录的generate_num_and_suit_list.py。但从顶层目录导入时,Python的搜索路径是顶层目录,子目录里的绝对导入找不到目标模块,就会抛出ModuleNotFoundError。
解决办法
1. 改用相对导入
修改step_2_my_hand/app.py里的导入语句,用相对路径指向同目录的模块:
from .generate_num_and_suit_list import generate_num_list_from_my_hand
注意:用这种方式后,不能再直接双击或用python app.py运行子目录里的app.py,需要以模块方式运行(从顶层目录执行):
python -m all_the_steps_with_coordinates.step_2_my_hand.app
2. 使用基于包结构的绝对导入
假设你的项目结构是:
顶层目录/ ├─ all_the_steps_with_coordinates/ │ ├─ step_2_my_hand/ │ │ ├─ app.py │ │ ├─ generate_num_and_suit_list.py │ │ └─ __init__.py │ └─ __init__.py └─ app.py
把step_2_my_hand/app.py的导入语句改成完整的包路径:
from all_the_steps_with_coordinates.step_2_my_hand.generate_num_and_suit_list import generate_num_list_from_my_hand
这样不管是从顶层导入,还是直接运行子目录的app.py(需确保顶层目录在sys.path中,可通过设置环境变量PYTHONPATH为顶层目录路径实现),都能正常工作。
3. 给直接运行的脚本添加路径
如果想保留相对导入,同时还能直接运行子目录的app.py,可以在step_2_my_hand/app.py开头加入以下代码,手动把项目顶层目录加入搜索路径:
import sys from pathlib import Path # 定位到项目顶层目录(根据你的实际结构调整层级,这里假设顶层是all_the_steps_with_coordinates的父目录) top_project_dir = Path(__file__).resolve().parent.parent.parent sys.path.append(str(top_project_dir))
内容的提问来源于stack exchange,提问作者dzdsds
相关产品推荐
相关产品推荐

