python隐式命名空间包不与setuptools一起安装

时间:2014-11-20 19:01:07

标签: python-3.x namespaces setuptools python-3.4

使用Python 3.4和Setuptools,我试图让命名空间包正常工作,如PEP 420中所定义。我的目录结构如下所示:

  • 项目
    • __初始化__。PY
      • 几个.py文件
    • 登录
      • com1
        • 几个.py文件
      • com2
        • 几个.py文件
    • 接口
      • misc files

使用setuptools find_package()功能时,它会找到"项目"包,但它没有安装" project"中的任何文件夹(隐式子包)。当我解压缩.egg文件时,我看到的只是里面的__init__.py文件,没有子目录或文件。

我可以在每个目录中放一个__init__.py,但由于这些文件都是空的,我不喜欢它使结构工作的方式,我试图避免这种情况。 / p>

如果我搬到我的"项目之外"目录,并运行以下,它的工作原理

python -m project.logging.com1.myfile

但是在其他任何地方它都不起作用,因为setuptools不会安装那些没有__init__.py的子目录(隐式名称空间)。

如何让setuptools正确安装我的隐式命名空间包?我只需要告诉它安装目录中的所有文件,这样就足够了吗?

2 个答案:

答案 0 :(得分:3)

看来,为setuptools添加PEP 420支持的初始拉取请求是rejected。有关在another issue上合并PEP 420支持的最佳方法的公开讨论,但目前看来并不支持隐式命名空间。

答案 1 :(得分:0)

find_packages不支持隐式命名空间包。但是,find_packages所做的只是返回dotted.package.name的列表。您仍然可以明确列出您的包。