使用Python 3.4和Setuptools,我试图让命名空间包正常工作,如PEP 420中所定义。我的目录结构如下所示:
使用setuptools find_package()
功能时,它会找到"项目"包,但它没有安装" project"中的任何文件夹(隐式子包)。当我解压缩.egg文件时,我看到的只是里面的__init__.py文件,没有子目录或文件。
我可以在每个目录中放一个__init__.py,但由于这些文件都是空的,我不喜欢它使结构工作的方式,我试图避免这种情况。 / p>
如果我搬到我的"项目之外"目录,并运行以下,它的工作原理
python -m project.logging.com1.myfile
但是在其他任何地方它都不起作用,因为setuptools不会安装那些没有__init__.py的子目录(隐式名称空间)。
如何让setuptools正确安装我的隐式命名空间包?我只需要告诉它安装目录中的所有文件,这样就足够了吗?
答案 0 :(得分:3)
看来,为setuptools添加PEP 420支持的初始拉取请求是rejected。有关在another issue上合并PEP 420支持的最佳方法的公开讨论,但目前看来并不支持隐式命名空间。
答案 1 :(得分:0)
find_packages
不支持隐式命名空间包。但是,find_packages
所做的只是返回dotted.package.name
的列表。您仍然可以明确列出您的包。