python中的多层包

波浪先生

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

package\_
    __init__.py
    subpackage1\_
        __init__.py
        file1.py
    subpackage2\_
        __init__.py
        file2.py

(为了简化理解,我正在对其进行简化)。

__init__.py对顶级看起来是这样的:

__all__ = ["subpackage1", "subpackage2"]

而且,由于某种原因,在导入软件包时,它无法识别来自file1.py或的任何东西file2.py任何想法如何解决?

如果您需要更多详细信息,请参见github上的项目:https : //github.com/Retr0MrWave/mathModule所谓的目录我packagemathmodule_pkg在实际项目

阿恩

__all__用名称填充字段不会使导入成为可能,它仅表示您要导入的含义。star-imports会拾取此提示以限制导入的内容,而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(...)  

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章