python中的多层包



我有一个python包,里面有包。这个解释似乎很奇怪,所以我将包括我的包的结构:

package_
__init__.py
subpackage1_
__init__.py
file1.py
subpackage2_
__init__.py
file2.py

(为了更容易理解,我正在简化它(。

顶层的__init__.py如下所示:

__all__ = ["subpackage1", "subpackage2"]

而且,由于某些原因,在导入包时,它无法识别来自file1.pyfile2.py的任何thong。有什么办法吗?

如果您需要更多详细信息,以下是github上的项目:https://github.com/Retr0MrWave/mathModule.我称之为package的目录是实际项目中的mathmodule_pkg

用名称填充__all__字段并不能使导入成为可能,它只是作为使可导入的含义的提示。这个提示被明星导入用来限制导入的内容,像pycharm这样的IDE也用它来了解什么是公开的,什么不是公开的,但仅此而已

如果你想启用嵌套类和函数的顶级导入,你需要

  1. 将它们导入顶级__init__.py
  2. 将它们绑定到可用于导入的名称
  3. 可选地,在__all__中引用所述名称,以使API美观且明显

以您引用的项目为例,它看起来是这样的:

mathmodule_pkg/__init__.py

import mathmodule_pkg.calculus.DerrivativeAndIntegral  #1
integral = mathmodule_pkg.calculus.DerrivativeAndIntegral.integral  #2
__all__ = ['integral']  # 3

使用非常常见的from some.package import some_name形式,我们可以将步骤1和2结合起来,减少重新绑定名称时出现错误的可能性:

from mathmodule_pkg.calculus.DerrivativeAndIntegral import integral  # 1 and 2
__all__ = ['integral']  # 3

使用任何一种形式,安装软件包后,都可能出现以下情况:

>>> from mathmodule_pkg import integral
>>> integral(...)  

相关内容

  • 没有找到相关文章

最新更新