通过__init__.py脚本导入python模块

时间:2019-09-24 17:53:44

标签: python import

我的目录结构是

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进行导入。

1 个答案:

答案 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