當試圖訪問臨時服務器上的ICU Collator屬性時,出現此錯誤。PyICU在Django shell中工作,但不在Web服務器上
AttributeError at /...
'module' object has no attribute 'Collator'
當啓動Django的shell並執行完全相同的代碼時,一切似乎都像在本地一樣工作。導致該錯誤代碼是:通過Ondrej's PHP5 PPA
import icu
collator = icu.Collator.createInstance(icu.Locale(get_language()))
objects = [i for i in sorted(objects, key=attrgetter('city'), cmp=collator.compare)]
我已經成功地安裝了ICU(libicu52, libicu-dev
),以及PyICU本地和我們的臨時服務器上。使用Python 2.7.5,Django 1.5.5,Nginx 1.4.1和uWSGI 1.9.13運行Ubuntu Server 13.10的服務器。
以下是完整回溯:
File "/var/www/venv/site/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
115. response = callback(request, *callback_args, **callback_kwargs)
File "/var/www/venv/site/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
68. return self.dispatch(request, *args, **kwargs)
File "/var/www/venv/site/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch
86. return handler(request, *args, **kwargs)
File "/var/www/.../pages/views.py" in get
48. return StoreListView.as_view(object=self.object)(request)
File "/var/www/venv/site/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
68. return self.dispatch(request, *args, **kwargs)
File "/var/www/venv/site/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch
86. return handler(request, *args, **kwargs)
File "/var/www/venv/site/local/lib/python2.7/site-packages/django/views/generic/list.py" in get
124. self.object_list = self.get_queryset()
File "/var/www/.../geosearch/views.py" in get_queryset
22. objects = self.sort_objects(objects)
File "/var/www/.../geosearch/views.py" in sort_objects
59. collator = icu.Collator.createInstance(icu.Locale(get_language()))
Exception Type: AttributeError at /...
Exception Value: 'module' object has no attribute 'Collator'
我設法打印ICU的__dict__
,但它給了我一個ICUError。在本地,ICU將返回其實際屬性,包括Collator。
ICUError=<class 'icu.ICUError'>,
__builtins__={'bytearray': <type 'bytearray'>,
'IndexError': <type 'exceptions.IndexError'>
[...]
代碼在Django的shell中應該如何工作,而不是通過Web服務器,這可能是什麼原因?