gpt4 book ai didi

python - 如何将 pkgutil.walk_packages 用于压缩包

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:48 24 4
gpt4 key购买 nike

我可以在不先解压缩的情况下找到压缩包中的模块吗?

我正在使用 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

关于python - 如何将 pkgutil.walk_packages 用于压缩包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29699345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com