ImportError;zipimporters从pkgutil.iter_importers()消失了
我有一个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')
这到底是怎么回事呢?我该怎么做才能让它正常工作,而不需要使用这种变通方法?