我可以在不先解压的情况下找到压缩包中的模块吗?
我正在pkgutil.walk_packages
使用importlib
.
for _, pkg, _ in pkgutil.walk_packages(package.__path__):
yield importlib.import_module(pkg)
Run Code Online (Sandbox Code Playgroud)
这在压缩包时不起作用。walk_packages
走一条路。
我可以先解压缩包并使用:
for _, pkg, _ in pkgutil.walk_packages(unzipped_package_path):
yield importlib.import_module(pkg)
Run Code Online (Sandbox Code Playgroud)
但我希望能够在不先解压缩的情况下做到这一点。
pkgutil.getdata
使用压缩包,我很惊讶pkgutil.walk_packages
没有工作。
我想知道我是否遗漏了什么。
另外,我仅限于 Python 2.7.0
它适用于 Python 2.7.5。将 urwid 作为一个蛋,它只是 PYTHONPATH 上的一个 .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),
...
Run Code Online (Sandbox Code Playgroud)
但包名都是相对于urwid
. 使用importlib.import_module('urwid.canvas')
而不是importlib.import_module('canvas')
. pkgutil.walk_packages
还将接受prefix='urwid.'
关键字参数并将该文本作为输出名称的前缀。
您还应该注意ispkg
中的第三个值walk_packages
。
归档时间: |
|
查看次数: |
775 次 |
最近记录: |