VS Code中Python模块导入问题:test.py无法调用hello()函数
解决test.py中导入hello()函数的问题
问题原因
test.py位于myapp目录下,直接运行时Python的默认搜索路径(sys.path)是当前脚本所在的myapp目录,而myapp包的父目录(project)不在搜索路径内,因此无法识别myapp模块。你之前添加的path\project\myapp路径方向错误,Python会去该路径下寻找myapp,自然找不到目标模块。
解决方案
方法1:动态添加project目录到sys.path(推荐,跨平台且灵活)
在test.py开头加入以下代码,通过脚本自身路径自动定位project根目录:
import sys from pathlib import Path # 获取project目录的绝对路径:当前脚本的父目录的父目录 project_root = Path(__file__).resolve().parent.parent sys.path.append(str(project_root)) from myapp import hello hello()
这种方式无需硬编码路径,不管你在哪个位置运行test.py,都能正确找到myapp包。
方法2:使用相对导入
由于test.py和__init__.py同属myapp包,可直接用相对导入语法:
from . import hello hello()
注意:这种方式不能直接用python test.py运行脚本,必须从project目录下执行:
python -m myapp.test
相对导入仅在模块作为包的一部分被导入时生效,直接运行脚本会将其视为顶层模块,无法识别相对导入的语法。
方法3:配置VS Code运行工作目录
在VS Code中修改运行配置,让test.py的运行工作目录指向project:
- 打开
.vscode/launch.json(若没有,可通过「运行和调试」面板创建) - 修改
cwd字段为${workspaceFolder}(假设你的VS Code工作区根目录是project):
{ "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "cwd": "${workspaceFolder}", "console": "integratedTerminal" } ] }
配置完成后,直接在VS Code中运行test.py,就能正常执行from myapp import hello语句。
内容的提问来源于stack exchange,提问作者abj
相关产品推荐
相关产品推荐

