Python跨模块导入遇ModuleNotFoundError,多种尝试无效求助
Python跨模块导入问题解决方案(Windows 10 + VS Code + Python 3.11.4)
项目结构确认
test/ │ ├───demoA │ test1.py │ __init__.py │ └───demoB test2.py __init__.py
test1.py内容:
def hello(): print("hello")
以下是三种经测试有效的解决方案:
方法一:临时修改sys.path(无需额外配置)
在test2.py开头添加代码,将项目根目录(test文件夹)加入Python的模块搜索路径,之后即可正常导入:
import sys import os # 获取当前脚本所在目录 current_dir = os.path.dirname(os.path.abspath(__file__)) # 向上一级找到项目根目录 root_dir = os.path.dirname(current_dir) # 加入sys.path sys.path.append(root_dir) # 导入并调用函数 from demoA.test1 import hello hello()
直接运行test2.py即可输出hello。
方法二:配置VS Code全局PYTHONPATH(永久生效)
- 在项目根目录(test文件夹)下创建
.vscode文件夹,新建settings.json文件,写入:
{ "python.analysis.extraPaths": ["${workspaceFolder}"], "python.envFile": "${workspaceFolder}/.env" }
- 在test根目录创建
.env文件,写入:
PYTHONPATH=${PYTHONPATH};${WORKSPACE_FOLDER}
- 重启VS Code,在test2.py中直接使用绝对导入:
from demoA.test1 import hello hello()
后续该项目内所有脚本都能直接识别根目录下的包。
方法三:相对导入(需按包模块方式运行)
相对导入仅能在包结构内生效,不能直接运行test2.py,需通过模块方式启动:
- 修改test2.py内容为:
from ..demoA.test1 import hello hello()
- 打开命令行,切换到test文件夹的上级目录(比如test在
D:\code下,就进入D:\code) - 执行命令:
python -m test.demoB.test2
通过-m参数将test2.py作为包的一部分执行,此时相对导入的路径关系会被正确识别。
注意事项
- 确保每个包目录下的
__init__.py文件存在且未被误删(你的项目已满足) - 不要使用与Python标准库重名的模块名(比如避免命名为
os.py、sys.py) - 确认VS Code使用的Python解释器是你配置的3.11.4版本(可通过左下角状态栏切换)
内容的提问来源于stack exchange,提问作者Yeffarson
相关产品推荐
相关产品推荐

