我最近发现一个软件包安装了
$ pip install -e .
子包中没有__init__.py
文件。不过,我可以毫无问题地导入它。当我安装相同的
$ pip install .
我无法导入子包。为什么?
(以防万一:我使用 Python 3.6(
没有__init__.py
的文件夹可以被视为隐式命名空间包的一部分。除非您知道命名空间包是什么并且特别想要一个,否则您仍应在包中包含__init__.py
,但这就是这里发生的事情。
使用 pip install -e .
,pip
安装一个东西,告诉 Python 直接在原始源文件夹中查找包内容。当 Python 查找源文件夹时,它会找到无__init__.py
文件夹。
使用 pip install .
,pip
只安装setup.py
所说的要安装的内容,而您的setup.py
不会说要安装无__init__.py
文件夹。Python 查找已安装的软件包版本,而不是原始源文件夹,并且找不到 no- __init__.py
文件夹。