ImportError;zipimporters从pkgutil.iter_importers()消失了

1 投票
1 回答
666 浏览
提问于 2025-04-17 02:58

我有一个Django的实例,最近出现了一个奇怪的问题,就是它无法导入memcache这个模块……这个问题是在它运行得很好一段时间后,发生了某个未知事件后出现的。

我的LAMP配置如下:

  • 操作系统:RHEL 5.7
  • 服务器:Apache 2.2.3
  • mod_wsgi版本:2.3(动态链接到Python 2.5.4 .so文件)
  • Python版本:2.5.4
  • Django版本:1.2

memcache模块的位置是:/usr/local/lib/python2.5/site-packages/python_memcached-1.44-py2.5.ee/memcache.pyc

如果我打开命令行,输入import memcache,它可以正常导入。

而且在Django中,import memcache也曾经正常工作过。

但是在某个未知事件发生后,导入就失败了,出现了错误:ImportError: No module named memcache

在失败发生前,我记录了系统的路径,发现路径中明确包含了/usr/local/lib/python2.5/usr/local/lib/python2.5/site-packages

我还记录了pkgutil.iter_importers()的响应,发现了一些有趣的事情:在失败时,iter_importers没有任何zipimporters,而zipimporter是用来查看egg包内部并找到memcache的。

如果我手动导入memcache,它是可以正常工作的:

try:
    import memcache
except ImportError:
    import zipimport
    zi = zipimport.zipimporter('/usr/local/lib/python2.5/site-packages/python_memcached-1.44-py2.5.egg')
    memcache = zi.load_module('memcache')

这到底是怎么回事呢?我该怎么做才能让它正常工作,而不需要使用这种变通方法?

1 个回答

0

好的,我找到了答案。在64位电脑上,Python 2.5的os.listdir这个功能有一个bug。当我应用了这个修复补丁后,一切都正常了,问题也解决了。

撰写回答