无法在python包中使用`\uuuu init\uuuu.py`文件中的`\uu all\uuuu`加载子包
我想使用最上面的无法在python包中使用`\uuuu init\uuuu.py`文件中的`\uu all\uuuu`加载子包,python,module,package,init,Python,Module,Package,Init,我想使用最上面的\uu init\uuuuupy.py文件中的\uuuuuuu all\uuuuuuuuuu>属性加载子包,而不是在那里使用导入,但不幸的是,我无法让它工作 下面是一个简化的示例: 我有我的包裹 pdbsr/ __init__.py* ... extras/ __init__.py ... *这个星号应该突出显示我在下面讨论的\uuuu init\uuuu文件 所以当我把线 import extras 在\uu
\uu init\uuuuupy.py
文件中的\uuuuuuu all\uuuuuuuuuu>属性加载子包,而不是在那里使用导入
,但不幸的是,我无法让它工作
下面是一个简化的示例:
我有我的包裹
pdbsr/
__init__.py*
...
extras/
__init__.py
...
*
这个星号应该突出显示我在下面讨论的\uuuu init\uuuu
文件
所以当我把线
import extras
在\uuuu init\uuuu.py
文件中,一切正常。在解释器中测试模块时,我得到以下响应,这表明模块已成功加载:
>>> import pdbsr
>>> pdbsr.extras
<module 'pdbsr.extras' from '.../site-packages/pdbsr/extras/__init__.pyc'>
我有个问题:
>>> import pdbsr
>>> pdbsr.extras
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'extras'
>>> extras
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'extras' is not defined
等等。因为每个子包都有很多.py
文件,所以我的\uuuu init\uuu
文件变得非常庞大
例如,pdbsr/pdb_file/new_pdb包含类NewPdb()
,我可以在解释器中调用该类
>>> import pdbsr
>>> new = pdbsr.NewPdb()
(我想避免进一步的点符号,比如pdbsr.new\u pdb.NewPdb()
)这不是\u all\u
所做的<代码>\uuuuuuuuuuuuuuuuuuuuuuuu
是导入模块时可见的模块成员列表。在\uuuu init\uuuu
文件中使用import
可能是加载软件包的最佳方式,除非您有一些特殊原因说明这不起作用。感谢您的深入了解。但我还是有点不确定你所说的“可见”是什么意思。我还为我的问题添加了一个编辑部分,因为我意识到我以前选择了一个非常糟糕的例子
`from pdbfile.new_pdb import *`
`from pdbfile.[...] import *`
`from pdbfile.[...] import *`
>>> import pdbsr
>>> new = pdbsr.NewPdb()