我的目录结构是
app.py
lib
__init__.py
_foo.py
我在__init__.py
里面写过
from . import _foo as foo
然后在app.py
内尝试拨打电话
from lib.foo import *
但它抛出ModuleNotFoundError: No module named 'lib.foo'
异常。
基本上,我想通过_foo.py
脚本从__init__.py
导入所有内容。
虽然我意识到如果将_foo.py
重命名为foo.py
,代码可以正常工作,
我仍然想知道是否有任何方法可以通过__init__.py
进行导入。
答案 0 :(得分:1)
不确定是否会侵入import语句,但是您可以摆脱不太明确的内容:
lib/__init__.py
from . import _foo as foo
__all__ = ['foo']
lib/_foo.py
__all__ = [
'test'
]
test = 1
>>> from lib import *
>>> foo
<module 'lib._foo' from '/path/to/test/lib/_foo.py'>
>>> foo.test
1
>>>
编辑:您可以通过在运行时更新sys.modules来实现更明确的功能:
app.py
import sys
from lib import _foo
sys.modules['lib.foo'] = _foo
lib/_foo.py
test = 1
保留lib/__init__.py
以使lib成为模块
导入应用lib.foo
后,将提供一个可用模块
>>> import app
>>> from lib import foo
>>> foo
<module 'lib._foo' from '/path/to/test/lib/_foo.py'>
>>> foo.test
1