Python导入所有模块对象
我有以下文件:Python导入所有模块对象,python,python-3.x,Python,Python 3.x,我有以下文件: ./main.py ./lib/__init__.py ./lib/lib.py , , , 我不知道为什么定义了lib.lib,它不是lib.py文件中的变量。 有什么想法吗?对象是lib包中嵌套的lip.py文件 导入子模块后,它也可以作为包的属性使用(除非您在\uuuuu init\uuuuuuuuuuuuy.py文件中还包含lib名称) Python 3.3模块加载器(在Python中实现)只需设置: 这种行为或多或少隐含在以下内容中: 所有模块都有一个名称。子包名称用
./main.py
./lib/__init__.py
./lib/lib.py
,
,
,
我不知道为什么定义了lib.lib
,它不是lib.py文件中的变量。
有什么想法吗?对象是
lib
包中嵌套的lip.py
文件
导入子模块后,它也可以作为包的属性使用(除非您在\uuuuu init\uuuuuuuuuuuuy.py
文件中还包含lib
名称)
Python 3.3模块加载器(在Python中实现)只需设置:
这种行为或多或少隐含在以下内容中:
所有模块都有一个名称。子包名称用点与其父包名称隔开,类似于Python的标准属性访问语法。因此,您可能有一个名为sys
的模块和一个名为email
的包,后者又有一个名为email.mime
的子包和该子包中的一个名为demail.mime.text
当您应该尝试使用lib文件中的功能时,您似乎正在尝试引用lib.py文件。例如,
lib.somelibfunction()
…您有两行cat main.py
行;我认为第一行应该是cat lib/lib.py
。谢谢,您能告诉我在文档中这一行为是在哪里指定的吗?@simonzack仔细阅读,还有@simonzack:我怀疑它可能在中有记录,但我仍在扫描它。@martijnpieter这部分,也许?"每当加载包的子模块时,Python都会确保首先加载包本身,如有必要,加载包的\uuu init\uuu.py
文件。包也是如此。因此,当执行语句import Sound.Effects.echo
时,它首先确保加载Sound
,然后确保Sound.effect
cts已加载;只有在加载之后,它才能确保Sound.Effects.echo
已加载(如果以前没有加载过,则加载)。“但不确定这在Python 3中是否有所不同。@JAB:No.lib.\uuu dict\uuuu['lib']
被设置为支持这样一种期望,即lib.lib
即使在lib/\uuu init\uuuuuuuuuuuupy
中没有以该名称显式导入,也应该工作。
$ cat lib/lib.py
def method():
return 'method'
$ cat lib/__init__.py
from .lib import *
$ cat main.py
import lib
def main():
print(lib.lib)
if __name__=='__main__':
main()
# [find a loader and load the module object, setting sys.modules[name]]
module = sys.modules[name]
if parent:
# Set the module as an attribute on its parent.
parent_module = sys.modules[parent]
setattr(parent_module, name.rpartition('.')[2], module)