一般来说,我试图分发一个模块/文件,我想成为另一个已经在site-packages下设置目录结构的python包的一部分。
对于site-packages下的给定结构:
-- main_package
-- __init__.py
-- sub_package
-- __init__.py
-- bar.py
我希望模块foo.py
存在于模块bar.py
旁边,模块sub_package
下。如果我只是沿着典型包的行设置我的仓库中的结构,那么setuptools的__init__.py
需要破坏__init__.py
和main_package
的现有sub_package
文件。理想情况下,这将是一个轮子或sdist,可以从我们自己的pypi分发。
我已尝试使用py_module
,但我无法将模块放置在网站套餐下的顶层以外的任何位置。
具体来说,我试图将saltstack external_pillar分配到已经由盐设置的盐/柱/结构中。有多个盐实例可能需要也可能不需要external_pillar,所以简单地将支柱捆绑到我们所拥有的盐分布中是不可行的。
答案 0 :(得分:0)
您可能正在寻找namespace packages。
在你的情况下,这样的结构:
`-- main_package
| # no __init__.py here
`-- sub_package
|-- __init__.py
`-- foo.py
Python 3.3从PEP 420添加了隐式命名空间包。创建本机命名空间包所需的只是从命名空间包目录中省略
__init__.py
。...
使用命名空间包的每个分发都省略
__init__.py
或使用pkgutil-style__init__.py
,这一点非常重要。如果没有任何分发,则会导致命名空间逻辑失败,而其他子包将无法导入。...
最后,每个分发都必须在setup.py中为
namespace_packages
提供setup()
参数。
但是,根据您的问题,我不确定sub_package
中是否已存在main_package
。
如果确实如此,我不确定用于扩展sub_package
而不遮蔽其模块的结构,您可能需要使用备用子包名来实现此目的。