Python 仅为满足pylint和mypy而对_uinit__u;.py的要求

Python 仅为满足pylint和mypy而对_uinit__u;.py的要求,python,pylint,mypy,Python,Pylint,Mypy,我有一个具有以下(部分)目录结构的项目 . ├── mypy.ini ├── src │ ├── preppy │ │ ├── cli.py │ │ ├── __main__.py │ │ ├── model.py │ │ └── tools.py ├── pyproject.toml └── tests 在cli.py中,我有以下代码(文件中的第13行和第14行): 我在model.py和\uuuuuu main\uuuuuu.py 当工具在my IDE(

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

.
├── mypy.ini
├── src
│   ├── preppy
│   │   ├── cli.py
│   │   ├── __main__.py
│   │   ├── model.py
│   │   └── tools.py
├── pyproject.toml
└── tests
cli.py
中,我有以下代码(文件中的第13行和第14行):

我在
model.py
\uuuuuu main\uuuuuu.py
当工具在my IDE(代码-OSS)中自动运行时,所有类似的导入都会在
pylint
(2.5.3)和
mypy
(0.761)中引发错误,例如:

当我向文件夹中添加一个空白的
\uuuuu init\uuuuu.py
文件时,错误就会消失

我不需要这个
\uuuuu init\uuuuu.py
文件来让包正常工作。

我认为在PEP 420之后,不应该需要它,特别是如果它只是为了满足linters的需要

还有什么我做错了,或者我应该添加
\uuu init\uuuu.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不允许“通过省略
\uuu init\uuuuuuuuuuuupy.py来创建包”,它强制“通过省略
\uuu init\uuuuuuupy.py
来创建命名空间包”。这意味着:

  • 如果需要软件包,请添加
    \uuuu init\uuuu.py
  • 如果需要名称空间包,请省略
    \uuuu init\uuuu.py

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

请注意,PEP 420并没有说“您可以通过省略
\uuu init\uuuuuuuuuuuuupy
”来创建一个包,而是说“您通过省略
\uuu init\uuuuuuuuuuupy
来创建名称空间包”。那么你想要一个包还是一个名称空间包?@mistermiagi你说得对,我并不明确想要一个名称空间包——我只是想减少文件的混乱。也许最好添加
\uuuu init\uuuu.py
so。
[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]
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