gpt4 book ai didi

python - zipimporter 找不到/加载子模块

转载 作者:太空狗 更新时间:2023-10-30 01:14:35 27 4
gpt4 key购买 nike

我正在尝试从 ZIP 包加载子模块,但它不起作用。怎样做才是对的?

foo.zip

foo/
__init__.py
bar.py

测试.py

import os
import zipimport

dirname = os.path.dirname(__file__)
importer = zipimport.zipimporter(os.path.join(dirname, 'foo.zip'))
print importer.is_package('foo')
print importer.load_module('foo')
print importer.load_module('foo.bar')

输出

$ python test.py
True
<module 'foo' from 'foo.zip/foo/__init__.py'>
Traceback (most recent call last):
File "test.py", line 8, in <module>
print importer.load_module('foo.bar')
zipimport.ZipImportError: can't find module 'foo.bar'

更新 2015/04/11 06:30 PT

下面的方法可行,但这是问题的真正解决方案吗? zipimport.zipimporter 文档明确指出 “全名必须是完全限定的(带点的)模块名称。” 并且有一个 is_package() 方法似乎功能正常。

import os
import zipimport

dirname = os.path.dirname(__file__)
importer = zipimport.zipimporter(os.path.join(dirname, 'foo.zip'))

def load_module(name):
parts = name.split('.')
module = importer.load_module(parts[0])
full_name = parts[0]
for part in parts[1:]:
full_name += '.' + part
if not hasattr(module, '__path__'):
raise ImportError('%s' % full_name)
path = module.__path__[0]
module = zipimport.zipimporter(path).load_module(part)

return module

print load_module('foo.bar')

最佳答案

如果您将 importer.load_module('foo.bar') 更改为 importer.load_module('foo/bar'),它将加载。我不确定为什么,因为文档显示

load_module(fullname)

Load the module specified by fullname. fullname must be the fully qualified (dotted) module name. It returns the imported module, or raises ZipImportError if it wasn’t found.

关于python - zipimporter 找不到/加载子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29578210/

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