具有干净命名空间的 Setuptools 子包
Setuptools Subpackages with clean Namespace
我在 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
留在命名空间中是一种好习惯吗?
我找到了适合我的解决方法。如果模块名称以下划线开头,它不会自动包含在命名空间中。我将 some_script.py
更改为 _some_script.py
以及导入语句。
我在 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
留在命名空间中是一种好习惯吗?
我找到了适合我的解决方法。如果模块名称以下划线开头,它不会自动包含在命名空间中。我将 some_script.py
更改为 _some_script.py
以及导入语句。