当我导入模块时,Mypy 抛出错误。项目结构如下所示:
我将registry.py导入到actions.py中:
from src.homework.homework_1.registry import *
github上CI有这个问题
我尝试使用相对导入
from ..homework_1.registry import *
,但出现了另一个问题(无法使用pycharm和python3 -m“文件”运行项目):
欢迎来到 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 *”不好?)所以你应该尽量避免这样做。