适当的相对进口:“无法导入模块”

问题描述 投票:4回答:3

我有一个像这样结构的项目:

.
└── myapp
    ├── app.py
    ├── models
    │   ├── hello.py
    │   └── world.py
    └── requirements.txt

我有两个型号,helloworld。这两个模型都是从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中避免此错误?

python python-3.x visual-studio-code
3个回答
7
投票

您收到的错误是由名为pylint的python linter报告的错误。所以问题并不是特定于vscode扩展。

有两种解决方案:

  1. 请尝试使用vape .env在项目目录中添加PYTHONPATH=./myapp文件,这将告诉pylint在哪里可以找到您的模块
  2. 或者直接在vscode中打开文件夹myapp,而不是在vscode中打开父目录。

1
投票

由于hello.py和world.py位于同一个文件夹(也就是包)中,因此您应该在world.py中导入Hello类,如下所示:

from .hello import Hello

如本主题所述:What does a . in an import statement in Python mean?

.在这里表示从当前包中导入。


1
投票

错误来自pylint。您需要将此行添加到settings.json文件(VS代码)中:

"python.linting.pylintArgs": ["--init-hook",
        "import sys; sys.path.append('<absolute path to myapp directory>')"],
© www.soinside.com 2019 - 2024. All rights reserved.