You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:35:07