2011-09-23 29 views
1

我有一個Django實例的神祕不能進口的memcache的......後消失ImportError;和zipimporters從pkgutil.iter_importers()

燈配置(一段時間的磨合就好了之後發生的一些未知事件。):

  • RHEL 5.7
  • 阿帕奇2.2.3
  • mod_wsgi的2.3(動態鏈接到Python2.5.4。所以)
  • 的Python 2.5.4
  • 的Django 1.2

內存緩存坐在:/usr/local/lib/python2.5/site-packages/python_memcached-1.44-py2.5.ee/memcache.pyc

如果我打開一個命令shell,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。

如果我手動導入內存緩存,它的功能:

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') 

這是怎麼回事?如果沒有解決方法,我可以做些什麼來使其工作?

回答

0

好的。我找到了答案。 Python 2.5在64位計算機上的os.listdir C實現中有a bug。當我申請the patch,一切永久有效。