Python:使用setuptools

时间:2017-10-06 17:58:40

标签: python pip setuptools

一般来说,我试图分发一个模块/文件,我想成为另一个已经在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__.pymain_package的现有sub_package文件。理想情况下,这将是一个轮子或sdist,可以从我们自己的pypi分发。

我已尝试使用py_module,但我无法将模块放置在网站套餐下的顶层以外的任何位置。

具体来说,我试图将saltstack external_pillar分配到已经由盐设置的盐/柱/结构中。有多个盐实例可能需要也可能不需要external_pillar,所以简单地将支柱捆绑到我们所拥有的盐分布中是不可行的。

1 个答案:

答案 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而不遮蔽其模块的结构,您可能需要使用备用子包名来实现此目的。