我有一个包含以下(部分)目录结构的项目
.
├── mypy.ini
├── src
│ ├── preppy
│ │ ├── cli.py
│ │ ├── __main__.py
│ │ ├── model.py
│ │ └── tools.py
├── pyproject.toml
└── tests
在文件
cli.py
中,我有以下代码(文件中的第13行和第14行):from .model import Problem
from .tools import get_abs_path, transcode
我在model.py
和__main__.py
中也有类似的相对导入。所有相似的导入都会在我的IDE(Code-OSS)自动运行工具(如pylint
(2.5.3)和mypy
(0.761))中抛出错误。
Attempted relative import beyond top-level package pylint(relative-beyond-top-level) [13,1]
Cannot find implementation or library stub for module named '.model' mypy(error) [13,1]
Attempted relative import beyond top-level package pylint(relative-beyond-top-level) [14,1]
Cannot find implementation or library stub for module named '.tools' mypy(error) [14,1]
See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports mypy(note) [13,1]
当我向文件夹中添加一个空白的
__init__.py
文件时,错误消失了。
我不需要这个__init__.py
文件让包正常工作。
我认为在PEP 420之后,它不应该是必需的,特别是如果只是为了满足 lint 程序的要求。我是否还有其他做错的地方,或者只需要添加
__init__.py
并解决它 :) ?
pylint
的配置位于pyproject.toml
中:[tool.pylint.'MESSAGES CONTROL']
# Pylint and black disagree on hanging indentation.
disable = "C0330"
[tool.pylint.MISCELLANEOUS]
# Note: By default, "TODO" is flagged, this is disabled by omitting it
# from the list below.
notes = "FIXME,XXX"
mypy
的配置在 mypy.ini
文件中:
[mypy]
disallow_untyped_calls = True
disallow_untyped_defs = True
disallow_incomplete_defs = True
disallow_untyped_decorators = True
mypy_path = src
namespace_packages = True
[mypy-openpyxl]
ignore_missing_imports = True
[mypy-pulp]
ignore_missing_imports = True
[mypy-pytest]
ignore_missing_imports = True
我正在运行Python 3.8.0。
__init__.py
来创建一个包”,它说的是“您可以通过省略__init__.py
来创建一个命名空间包”。那么您想要一个包还是想要一个命名空间包? - MisterMiyagi__init__.py
。 - multipitch