我正在设计一个具有以下目录结构的python包
package\
__init__.py
subpackage1\
__init__.py
module1.py
module2.py
subpackage2\
__init__.py
module3.py
我希望用户能够在 ipython 中导入包时探索一个干净的名称空间,该名称空间反映了使用制表符完成的目录结构。
例如,做完之后
import package as pkg
我想在 pkg 上完成制表符。在 上显示pkg.subpackage1 pkg.subpackage2
和制表完成pkg.subpackage1
。显示pkg.subpackage1.module1 pgk.subpackage1.module2
。其中一些模块相互依赖,包括import statements
.
例如在module1.py
我们有,
from ..subpackage2 import module3
但是,我不希望有人能够通过制表符完成以下pkg.subpackage1.module1.module3
操作,即使他们已经完成了import pkg.subpackage1.module1
.
此外,当人们这样做时,import pkg.subpackage1.module1
我不希望在pkg.subpackage1.module1
. 显示我的内部异常类以及我在 module1 中将 numpy 作为 np 导入的事实。换句话说,我希望对用户隐藏我在 module1 中对 module3 的使用以及我对 numpy 作为 np.xml 的使用。是使用类似的东西import numpy as _np
和from ..subpackage2 import module3 as _module3
最好的方法吗?
我是否必须在我不希望他们看到的所有内容前面加上下划线?
为了澄清,我可以在 scipy 源代码中看到文件 scipy.integrate.quadrature 中包含该行import numpy as np
,但是当我import scipy
在 ipython 中执行此操作时,我可以使用制表符完成 scipy.integrate.quadrature 而看不到 np