Python跨模块导入报错:ModuleNotFoundError问题求助
Python模块导入依赖问题解决方案
问题场景
项目结构:
/project_name main.py __init__.py /modules __init__.py module1.py module2.py
环境信息:
- Windows系统
- Conda虚拟环境(Python 3.10)
- VSCode编辑器
运行main.py中的from modules.module1 import *时,触发错误:
ModuleNotFoundError: No module named 'module2'
原因是module1.py中使用了from module2 import *,当从项目根目录运行main.py时,Python无法在全局路径中找到module2。
解决方案
方法1:使用相对导入(推荐,符合Python包规范)
修改module1.py中的导入语句为相对导入,指向同目录下的module2:
from .module2 import *
这种方式明确表示从当前包内导入模块,是包内模块相互引用的标准写法。
方法2:手动添加项目路径到Python搜索路径
在main.py的最开头添加以下代码,将项目根目录加入Python的模块搜索路径:
import sys import os # 获取当前文件所在目录(项目根目录) project_root = os.path.dirname(os.path.abspath(__file__)) # 添加到搜索路径 sys.path.append(project_root)
这样Python会把项目根目录纳入搜索范围,module1中的from module2 import *就能找到对应的模块。
方法3:配置VSCode运行工作目录
通过VSCode的launch.json配置运行时的工作目录为项目根目录:
- 打开VSCode,点击左侧「运行和调试」面板
- 点击「创建launch.json文件」,选择Python环境
- 修改配置内容,添加
cwd字段:
{ "version": "0.2.0", "configurations": [ { "name": "Python: main.py", "type": "python", "request": "launch", "program": "${file}", "cwd": "${workspaceFolder}", "console": "integratedTerminal" } ] }
配置完成后,运行main.py时会以项目根目录为工作目录,模块导入路径自动生效。
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

