具有清晰命名空间的Setuptools子软件包

时间:2019-02-25 16:53:56

标签: python namespaces setuptools software-distribution

我正在python 3.7.2下使用setuptools 40.8.0将某些模块和软件包打包在一起,以使它们在系统范围内可用。我的目标是要有一个干净的名称空间,其中功能按功能单元捆绑在一起。

我的文件夹结构如下:

mymodule
|  setup.py
|  mymodule
 -  | __init__.py
  - |package_foo
     - __init__.py
     - some_script.py

setup.py:

from setuptools import setup, find_packages

setup(name='mymodule',
      version='1.0',
      packages=find_packages(),
      zip_safe=False)

顶级__init__.py

from . import package_foo

第二级__init__.py

from .some_script import some_function

(我实际上不确定,为什么在导入中需要第一个点,但是如果没有,我似乎无法使之可行。)

现在,如果我愿意

import mymodule

我的命名空间中有mymodule.package_foo.some_function(我想要),还有mymodule.package_foo.some_script(我不想要)。我可以在第二级__init__.py中添加一行,以删除some_script

del some_script

但是感觉不对。是否有另一种更优雅的方式来实现我的目标?还是将some_script留在命名空间中是一种好习惯?

1 个答案:

答案 0 :(得分:0)

我找到了适合我的解决方法。如果模块名称以下划线开头,则不会自动包含在名称空间中。我将some_script.py更改为_some_script.py,并将import语句也更改了。