我可以在不先解压缩的情况下找到压缩包中的模块吗?
我正在使用 pkgutil.walk_packages
检查包裹并使用 importlib
拉出所有模块.
for _, pkg, _ in pkgutil.walk_packages(package.__path__):
yield importlib.import_module(pkg)
压缩包时这不起作用。 walk_packages
采用路径。
我可以先解压缩包并使用:
for _, pkg, _ in pkgutil.walk_packages(unzipped_package_path):
yield importlib.import_module(pkg)
但我希望能够在不先解压的情况下完成。
pkgutil.getdata
适用于压缩包,令我惊讶的是 pkgutil.walk_packages
没有效果。
我想知道我是否遗漏了什么。
此外,我仅限于 Python 2.7.0
它适用于 Python 2.7.5。将 urwid 作为一个鸡蛋,它只是一个 .zip 文件,在 PYTHONPATH 上:
>>> import pkgutil, urwid
>>> list(pkgutil.walk_packages(urwid.__path__))
[(<zipimporter object "urwid.egg/urwid/">,
'canvas',
False),
(<zipimporter object "urwid.egg/urwid/">,
'command_map',
False),
(<zipimporter object "urwid.egg/urwid/">,
'compat',
False),
...
但是包名都是相对于urwid
的。使用 importlib.import_module('urwid.canvas')
而不是 importlib.import_module('canvas')
。 pkgutil.walk_packages
还将接受 prefix='urwid.'
关键字参数并将该文本作为输出名称的前缀。
您还应该注意 walk_packages
中的第三个值 ispkg
。
我是一名优秀的程序员,十分优秀!