我可以在没有首先解压缩的情况下找到压缩包中的模块吗?
我正在使用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
答案 0 :(得分: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.'
关键字参数,并将该文本前缀为输出名称。
您还应该注意来自ispkg
的第三个值walk_packages
。