【问题标题】:Does setuptools' find_packages require __init__.py files or not to recognize packagessetuptools 的 find_packages 是否需要 __init__.py 文件或不识别包
【发布时间】:2020-08-13 15:07:13
【问题描述】:

setuptools 的find_packages 是否仍要求软件包内部有一个__init__.py 文件?

documentation

只有包含__init__.py 文件的包才会被识别。

但我读到 __init__.py 文件不再需要将目录标记为 python 包。

【问题讨论】:

    标签: python setuptools python-packaging


    【解决方案1】:

    更新

    回头看,原来的答案是错误的。

    包初始化器__init__.py 文件)应该始终存在。由于一些实现细节,它确实可以在没有的情况下工作,但它不是严格意义上的东西,也不是应该依赖的东西。

    一些细节:


    原答案

    在最新版本的 Python 中,包初始化器__init__.py 文件)并不是绝对必要的,这意味着可以导入此类包等等。

    但是 setuptools 不是 Python,可以这么说。特别是find_packages 仍然基于此类文件的存在进行查找。另一方面,setuptools 还提供了替代的 find_namespace_packages 函数,它能够找到不包含包初始化程序的包。

    【讨论】:

    • 我想直接从PEP 420添加以下内容:“命名空间包与常规包没有根本区别。它只是创建包的不同方式。一旦创建了命名空间包,它和普通的包没有功能上的区别。”
    • 来自PEP 420:“我们无意取消对常规包的支持。如果开发人员知道她的包永远不会成为命名空间包的一部分,那么就有性能优势到它是一个常规包(带有__init__.py)。常规包的创建和加载可以在它位于路径上时立即进行。对于命名空间包,必须在创建包之前扫描路径中的所有条目。”
    猜你喜欢
    • 2016-09-05
    • 2020-05-07
    • 1970-01-01
    • 2021-12-28
    • 2015-02-27
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多