我想使用最上面文件__all__
中的属性而不是在那里使用 s来加载子包,但不幸的是,我无法让它工作。__init__.py
import
这里有一个简化的例子:
我有我的包裹
pdbsr/
__init__.py*
...
extras/
__init__.py
...
*
这个星号应该突出显示__init__
我在下面谈论的文件。
所以当我把线
import extras
进入__init__.py
文件,一切正常。当我在解释器中测试模块时,我得到以下响应,这表明模块已成功加载:
>>> import pdbsr
>>> pdbsr.extras
<module 'pdbsr.extras' from '.../site-packages/pdbsr/extras/__init__.pyc'>
在一个新的python shell中,我import extras
将__init__.py
文件中的替换为
__all__ = ["extras"]
我遇到一个问题:
>>> 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
任何人都知道我必须做什么才能通过加载子包__all__
?
编辑:
对于上面给出的非常糟糕的例子,我深表歉意。所以我最初的想法是我可以简化我的__init__.py
文件。例如,现在我
`from pdbfile.new_pdb import *`
`from pdbfile.[...] import *`
`from pdbfile.[...] import *`
等等。.py
由于每个子包都有很多文件,所以我的__init__
文件变得非常大。
例如, pdbsr/pdb_file/new_pdb 包含 class NewPdb()
,我可以在解释器中调用它
>>> import pdbsr
>>> new = pdbsr.NewPdb()
(我想避免更多的点符号,比如pdbsr.new_pdb.NewPdb()
)