Jim*_*hez 8 python python-3.x visual-studio-code
我有一个结构如下的项目:
.
??? myapp
??? app.py
??? models
? ??? hello.py
? ??? world.py
??? requirements.txt
Run Code Online (Sandbox Code Playgroud)
我有两个模型,hello和world。这两种模型都是从app.py我将其导入的地方使用的:
from models.hello import Hello
from models.world import World
Run Code Online (Sandbox Code Playgroud)
而且world还需要使用hello。我想这在world.py:
from models.hello import Hello
Run Code Online (Sandbox Code Playgroud)
当我运行该应用程序时,以上内容在技术上有效,但是VSCode的Python扩展给我以下错误:
E0401:Unable to import 'models.hello'.
Run Code Online (Sandbox Code Playgroud)
从同一目录导入子模块的正确方法是什么?如何避免VSCode中的此错误?
Don*_*Don 12
您收到的错误是由名为的python linter报告的错误pylint。因此,问题实际上并非特定于vscode扩展。
有两种解决方案:
请尝试.env使用vape在您的项目目录中添加文件PYTHONPATH=./myapp,这将告诉pylint在哪里找到您的模块
或者myapp直接在vscode中打开文件夹,而不是在vscode中打开父目录。
错误来自pylint。您需要将此行添加到 settings.json 文件(VS Code)中:
"python.linting.pylintArgs": ["--init-hook",
"import sys; sys.path.append('<absolute path to myapp directory>')"],
Run Code Online (Sandbox Code Playgroud)
在您的.vscode/settings.json(工作区的根目录中)中,您需要以下两行:
一种是在虚拟环境中使用 pylint(如果有的话),以便 pylint 能够感知到这一点。如果您的 pylint 或虚拟环境位于不同的位置,您将需要调整以下内容。
"python.linting.pylintPath": "${workspaceFolder}/api/venv/bin/pylint"
Run Code Online (Sandbox Code Playgroud)
其一,正如 Shtefan上面提到的,让 pylint 知道项目的 python 部分在哪里:
"python.linting.pylintArgs": [
"--init-hook",
"import sys; sys.path.append('${workspaceFolder}/api')"
]
Run Code Online (Sandbox Code Playgroud)
如果您尚未在虚拟环境中设置 vscode,则此附加行可能会有所帮助,如果您的虚拟环境路径与以下路径不匹配,则可能需要再次进行修改。
"python.pythonPath": "${workspaceFolder}/api/venv/bin/python",
Run Code Online (Sandbox Code Playgroud)
由于hello.py和world.py位于同一文件夹(也称为包)中,因此您应该在world.py中导入 Hello 类,如下所示:
from .hello import Hello
Run Code Online (Sandbox Code Playgroud)
正如该线程中所述:What does a . Python 中的 import 语句是什么意思?
这里.表示从当前包导入。
| 归档时间: |
|
| 查看次数: |
7347 次 |
| 最近记录: |