【问题标题】:Setuptools Subpackages with clean Namespace具有干净命名空间的 Setuptools 子包
【发布时间】:2023-03-03 19:18:01
【问题描述】:

我在 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 留在命名空间中是一种好习惯?

【问题讨论】:

    标签: python namespaces setuptools software-distribution


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 2019-08-30
      • 1970-01-01
      • 2013-01-02
      相关资源
      最近更新 更多