Mypy 错误:“在不同的模块名称下找到了两次源文件:“registry”和“src.homework.homework_1.registry”

问题描述 投票:0回答:1

当我导入模块时,Mypy 抛出错误。项目结构如下所示:

enter image description here

我将registry.py导入到actions.py中:

from src.homework.homework_1.registry import *

github上CI有这个问题

enter image description here

我尝试使用相对导入

from ..homework_1.registry import *
,但出现了另一个问题(无法使用pycharm和python3 -m“文件”运行项目):

enter image description here

python import mypy
1个回答
0
投票

欢迎来到 Stack Overflow,首先给大家一个提示,提供有关您正在使用的软件的规格的更多详细信息是有帮助的。在这种情况下,您使用的 python 和 mypy 版本是合适的。

现在,回答你的实际问题。您需要做的第一件事是将

__init__.py
文件添加到
src
的每个子目录中:

src
└── homework
    ├── __init__.py
    ├── homework_1
    │   ├── __init__.py
    │   └── registry.py
    └── homework_2
        ├── __init__.py
        └── actions.py

以下是一些资源,可帮助您了解这些文件在 python 项目中的功能,但简而言之,其目的是告诉解释器应将目录视为 python 模块:

但是,您可能会发现即使添加这些

__init__.py
文件后,mypy 仍然会抛出错误。如果是这样,一种解决方案是在与
__init__.py
同一级别的
src
目录中添加另一个
homework

但是,顶级目录名为

src
的事实告诉我,您正在尝试创建一个 命名空间包。因此,您真正想要做的是调整 mypy 配置以反映这一点。例如,使用这些 CLI 参数运行 mypy 可以修复该问题:
mypy --no-namespace-packages --ignore-missing-imports src
。看起来您正在 github 操作中运行 mypy,因此您可以修改 github 操作本身(它将位于
.github/workflows/
下),或者更好的方法是使用这些 CLI 创建或修改现有的 mypy 配置文件参数。

最后一件事,与 mypy 无关。在您的问题中,您建议了这个

from ..homework_1.registry import *
。 Start 导入被广泛认为是一种反模式(为什么“import *”不好?)所以你应该尽量避免这样做。

© www.soinside.com 2019 - 2024. All rights reserved.