正确的相对导入:“无法导入模块”

2024-05-06 06:50:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的项目:

.
└── 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中避免此错误?


Tags: 项目frompy模型importtxtapphello
3条回答

您收到的错误是一个名为pylint的python linter报告的错误。所以这个问题并不是针对vscode扩展的。

有两种解决方案:

  1. 请尝试使用vape在项目目录中添加一个.env文件,这将告诉pylint在哪里可以找到模块

  2. 或者直接在vscode中打开文件夹myapp,而不是在vscode中打开父目录。

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

"python.linting.pylintArgs": ["--init-hook",
        "import sys; sys.path.append('<absolute path to myapp directory>')"],

由于hello.pyworld.py位于同一文件夹(aka package)中,您应该按照如下方式导入world.py中的hello类:

from .hello import Hello

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

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

相关问题 更多 >