2015-04-17 24 views
4

我可以在不首先解壓縮的情況下在壓縮包中找到模塊嗎?如何將pkgutil.walk_packages用於壓縮包

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

它爲我關於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

+0

感謝您的回覆。我會看看這個。我想我記得2.7.0有一個問題。 –