Python:使用setuptools将文件/模块分发到另一个包中
通常,我想分发一个模块/文件,使其成为另一个已经在site-packages下设置了目录结构的python包的一部分。Python:使用setuptools将文件/模块分发到另一个包中
对于下站点包的给定结构:
-- main_package
-- __init__.py
-- sub_package
-- __init__.py
-- bar.py
我有一个模块foo.py
,我想旁边的模块bar.py
存在,无论是包sub_package
下。如果我只是在一个典型的包中设置了我的回购中的结构,那么setuptools的__init__.py
需要为main_package
和sub_package
打开现有的__init__.py
文件。理想情况下,这将是一个*或sdist,可以从我们自己的pypi分发。
我试过使用py_module
,但我无法将它放在除站点包下的顶层之外的任何位置。
具体来说,我试图将一个saltstack external_pillar分布到已经由salt设置的salt/pillar/structure中。有多个salt实例可能会或可能不需要external_pillar,因此将柱子捆绑到盐分布中是不可行的。
您可能正在寻找namespace packages。
随着你的情况是这样的结构:
`-- main_package
| # no __init__.py here
`-- sub_package
|-- __init__.py
`-- foo.py
的Python 3.3添加隐含命名的包从PEP 420所有这一切都需要创建一个本地命名空间包,你只需要省略
__init__.py
从命名空间包目录。...
这是非常重要的,它使用的命名空间包每个发行省略了
__init__.py
或使用pkgutil风格__init__.py
。如果任何发行版没有,它将导致命名空间逻辑失败,其他子包将不可导入。...
最后,每个发行必须setup.py提供
namespace_packages
参数setup()
。
但是,从您的问题我不确定main_package
是否已存在sub_package
或不。
如果确实如此,我不确定用于扩展sub_package
的结构,但不会影响其模块,您可能需要使用备用子包名称来实现此目的。
为什么你想在现有的site-packages目录下安装这个模块?你期望什么行为? – FabienP
我期望'import main_package.sub_package.foo'将会工作 – Silfheed