我有一个像这样结构的项目:
.
└── myapp
├── app.py
├── models
│ ├── hello.py
│ └── world.py
└── requirements.txt
我有两个型号,hello
和world
。这两个模型都是从app.py
使用的,我在这里导入它们:
from models.hello import Hello
from models.world import World
但world
也需要使用hello
。我在world.py
尝试过这个:
from models.hello import Hello
以上技术在我运行应用程序时有效,但VSCode的Python扩展程序给我以下错误:
E0401:Unable to import 'models.hello'.
从同一目录导入子模块的正确方法是什么?如何在VSCode中避免此错误?
您收到的错误是由名为pylint
的python linter报告的错误。所以问题并不是特定于vscode扩展。
有两种解决方案:
.env
在项目目录中添加PYTHONPATH=./myapp
文件,这将告诉pylint在哪里可以找到您的模块myapp
,而不是在vscode中打开父目录。由于hello.py和world.py位于同一个文件夹(也就是包)中,因此您应该在world.py中导入Hello类,如下所示:
from .hello import Hello
如本主题所述:What does a . in an import statement in Python mean?
.
在这里表示从当前包中导入。
错误来自pylint。您需要将此行添加到settings.json文件(VS代码)中:
"python.linting.pylintArgs": ["--init-hook",
"import sys; sys.path.append('<absolute path to myapp directory>')"],