编写包含示例数据文件等资源的python软件包时,为什么在(子)软件包中必须有__init__.py
? (或者这仅仅是3.7之前的怪癖?)
当前推荐的访问资源的方式是使用importlib.resources
(或在3.7之前的版本importlib_resources
中;而不是pkg_resources
,它存在性能问题或__file__
的操作,易碎,具体取决于分发方法)。但是,只有在存在__init__.py
文件(可以为空)的情况下,这才检测包目录中的资源。
Python长期以来一直不要求使用__init__.py
文件(例如,Guido addressed引起争议的版本,早于2.5版),现在(自PEP420起)省略了任何空的{{1 }}产生隐式命名空间包(并且还允许在单独的目录中拆分单个包)。但是出于某种原因,__init__.py
至少不支持此功能?