为什么用 `pip install -e .` 安装的包不需要 __init__.py?

Why do packages installed with `pip install -e .` not need __init__.py?

我最近发现安装了一个包

$ pip install -e .

子包中没有 __init__.py 文件。不过,我可以毫无问题地导入它。当我用

安装时
$ pip install .

我无法导入子包。为什么?

(以防万一:我使用 Python 3.6)

没有 __init__.py 的文件夹可能会被视为 implicit namespace package 的一部分。除非您知道名称空间包是什么并且特别想要一个,否则您仍然应该在包中包含 __init__.py,但这就是这里发生的事情。

pip install -e . 一起,pip 安装一个东西,告诉 Python 直接在您的原始源文件夹中查找包内容。 Python 在您的源文件夹中查找时,它会找到非 __init__.py 文件夹。

使用 pip install .pip 只安装 setup.py 说要安装的东西,而你的 setup.py 没有说要安装 no-__init__.py 文件夹. Python 在包的安装版本中查找,而不是您的原始源文件夹,它没有找到 no-__init__.py 文件夹。