gpt4 book ai didi

python - 对 __init__.py 的要求只是为了满足 pylint 和 mypy

转载 作者:行者123 更新时间:2023-12-04 12:37:39 24 4
gpt4 key购买 nike

我有一个具有以下(部分)目录结构的项目

.
├── 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所有类似的导入都会在 pylint 中抛出错误(2.5.3) 和 mypy (0.761) 当工具在我的 IDE(代码 - OSS)中自动运行时,例如:
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 之后,它不应该是必需的,尤其是如果它只是为了满足短绒。
是不是我做错了什么,或者我应该添加 __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。

最佳答案

PEP 420 不允许“通过省略 __init__.py 创建包”,它强制“通过省略 __init__.py 创建命名空间包”。这意味着:

  • 如果你想要一个包,添加 __init__.py .
  • 如果你想要一个命名空间包,省略 __init__.py .

  • 虽然像常规包一样使用命名空间包通常是有效的,但当包名冲突时,它可能会意外失败。在大多数情况下,命名空间包是不可取的。

    关于python - 对 __init__.py 的要求只是为了满足 pylint 和 mypy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62831486/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com