setuptools的find_packages
是否仍然要求包中包含__init__.py
文件?
文件显示
只有包含
__init__.py
文件的程序包才能被识别。
但我读到不再需要__init__.py
文件来将目录标记为python包。
更新
回过头来看,最初的答案是错误的。
包初始化程序(__init__.py
文件(应该始终存在。由于一些实现细节,它确实可以在没有的情况下工作,但它不是严格意义上的,也不是应该依赖的
一些细节:
- https://stackoverflow.com/a/62992832
- https://discuss.python.org/t/mixing-namespace-and-non-namespace-packages-bad-practice/7536/6
- https://discuss.python.org/t/init-py-pep-420-and-iter-modules-confusion/9642
- PEP 420
原始答案
在最新版本的Python中,包初始化程序(__init__.py
文件(并不是严格必要的,这意味着可以导入此类包,依此类推
但是setuptools可以说不是Python。特别地,find_packages
仍然基于这样的文件的存在来进行查找。另一方面,setuptools还提供了可选的find_namespace_packages
函数,该函数能够查找不包含包初始值设定项的包。