如何从多个子模块创建库?

2024-04-27 05:08:58 发布

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

我正在尝试构建一个包含多个子模块的库。总体结构如下:

package_test/
|___ setup.py
|___ README
|___ package_name/
|___|___ __init__.py
|___|___ submodule/
|___|___|___ __init__.py
|___|___|___ superawesome.py
|___|___ submodule2/
|___|___|___ __init__.py
|___|___|___ prettyokay.py

目标是允许用户执行以下操作:

from package_name.submodule import superawesome
from package_name.submodule2 import prettyokay

每个子模块的__init__.py当前包含(或子模块2的适当名称):

from .superawesome import superawesome
__all__ = ['superawesome']

内部包名称的__init__.py包含:

__version__ = 'v0.0.alpha'
__all__ = ['submodule','submodule2']

当我尝试使用它时,iPython显示以下错误:

From package_name.submodule import superawesome
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-03be4241edd5> in <module>()
----> 1 from package_name.submodule import superawesome

ModuleNotFoundError: No module named 'package_name.submodule'

我的setup.py当前包含:

from distutils.core import setup

setup(
  name = 'package_name',
  packages = ['package_name'], # this must be the same as the name above
  version = '0.1.1',
  long_description=open('README').read(),
)

我需要帮助弄清楚如何做分层导入结构,以便正确地导入子模块作为整个模块的一部分。这显然是一个人为的命名集,但在实际问题中,每个子模块都包含一组属于一起的模块。。。但是所有的子模块都是库所必需的;所以我真的想维护这个结构。你知道吗


Tags: 模块namefrompyimport名称packageinit