Python 如何将pkgutil.walk_包用于压缩包

Python 如何将pkgutil.walk_包用于压缩包,python,python-2.7,Python,Python 2.7,我能在压缩包中找到模块而不首先解压缩吗 我正在使用检查一个包,并使用拉出所有模块 这在压缩包时不起作用步行包采用路径 我可以先解压缩包,然后使用: for _, pkg, _ in pkgutil.walk_packages(unzipped_package_path): yield importlib.import_module(pkg) 但我希望不需要先解压缩就可以完成 pkgutil.getdata可以使用压缩包,我很惊讶pkgutil.walk\u包不起作用 我在想我是否错过了

我能在压缩包中找到模块而不首先解压缩吗

我正在使用检查一个包,并使用拉出所有模块

这在压缩包时不起作用<代码>步行包采用路径

我可以先解压缩包,然后使用:

for _, pkg, _ in pkgutil.walk_packages(unzipped_package_path):
    yield importlib.import_module(pkg)
但我希望不需要先解压缩就可以完成

pkgutil.getdata
可以使用压缩包,我很惊讶
pkgutil.walk\u包不起作用

我在想我是否错过了什么


此外,我仅限于使用Python 2.7.0,它在Python 2.7.5上适用。在PYTHONPATH上将urwid作为一个egg,它只是一个.zip文件:

>>> 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),
...
导入pkgutil,urwid >>>列表(pkgutil.walk\u包(urwid.\uuuu路径) [(, “画布”, 假),, (, “命令映射”, 假),, (, "同胞",, 假),, ...
但是包名都是相对于
urwid
的。使用
importlib.import\u模块('urwid.canvas')
而不是
importlib.import\u模块('canvas')
pkgutil.walk\u包
也将接受
prefix='urwid.
关键字参数,并将该文本作为输出名称的前缀


您还应该注意
walk\u packages

中的第三个值
ispkg
,谢谢您的回复。我会看看这个。我想我记得2.7.0有一个问题。
>>> 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),
...