我有一个带有包的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。所谓的目录我package
是mathmodule_pkg
在实际项目
__all__
用名称填充字段不会使导入成为可能,它仅表示您要导入的含义。star-imports会拾取此提示以限制导入的内容,而pycharm之类的IDE也会使用它来了解什么是暴露的,哪些不是暴露的-就是这样。
如果要启用嵌套类和函数的顶级导入,则需要
__init__.py
__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] 删除。
我来说两句