Python:使用setuptools将文件/模块分发到另一个包中

2024-06-16 10:53:30 发布

您现在位置:Python中文网/ 问答频道 /正文

一般来说,我尝试分发一个模块/文件,我希望它是另一个python包的一部分,该包已经在site packages下设置了目录结构。你知道吗

对于现场包下的给定结构:

-- main_package
   -- __init__.py
   -- sub_package
      -- __init__.py
      -- bar.py

我有一个模块foo.py,我想存在于模块bar.py旁边,都在包sub_package下。如果我只是在我的repo中按照一个典型包的行设置结构,那么setuptools需要的__init__.py会对main_packagesub_package的现有__init__.py文件进行重击。理想情况下,这将是一个轮子或sdist,可以从我们自己的pypi分发。你知道吗

我尝试过使用py_module,但是我不能让它将模块放在站点包的顶层之外的任何地方。你知道吗

具体地说,我正在尝试将saltstack外部支柱分发到salt已经设置的salt/支柱/结构中。有多个salt实例可能需要也可能不需要外部的\u支柱,因此简单地将支柱捆绑到salt分发中是不可行的。你知道吗


Tags: 模块文件py目录packagefooinitmain
1条回答
网友
1楼 · 发布于 2024-06-16 10:53:30

你可能在找namespace packages。你知道吗

在您的案例中,结构如下:

`  main_package
   |  # no __init__.py here
   `  sub_package
      |  __init__.py
      `  foo.py

Python 3.3 added implicit namespace packages from PEP 420. All that is required to create a native namespace package is that you just omit __init__.py from the namespace package directory.

...

It is extremely important that every distribution that uses the namespace package omits the __init__.py or uses a pkgutil-style __init__.py. If any distribution does not, it will cause the namespace logic to fail and the other sub-packages will not be importable.

...

Finally, every distribution must provide the namespace_packages argument to setup() in setup.py.

但是,从你的问题来看,我不确定sub_package是否已经存在于main_package中。你知道吗

如果是这样,我不确定在不隐藏其模块的情况下扩展sub_package所使用的结构,您可能需要使用备用子包名称来实现这一点。你知道吗

相关问题 更多 >