【问题标题】:Why do packages installed with `pip install -e .` not need __init__.py?为什么使用 `pip install -e .` 安装的软件包不需要 __init__.py?
【发布时间】:2019-12-01 02:20:57
【问题描述】:

我最近发现了一个安装包

$ pip install -e .

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

$ pip install .

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

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

【问题讨论】:

    标签: python python-packaging


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-15
      • 2018-07-27
      • 2017-04-25
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多