SLES 11P1의 Apache에서 MoinMoin을 실행하려고 합니다. 누군가 웹사이트에 액세스하려고 하면 Apache 로그에 다음 오류가 표시됩니다.
mod_wsgi (pid=20772): Target WSGI script '/srv/www/wiki/moin.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=20772): Exception occurred processing WSGI script '/srv/www/wiki/moin.
wsgi'.
Traceback (most recent call last):
File "/srv/www/wiki/moin.wsgi", line 44, in <module>
from MoinMoin.web.serving import make_application
File "/usr/local/lib64/python2.6/site-packages/MoinMoin/web/serving.py", line 14, in <module>
from MoinMoin import version, log
File "/usr/local/lib64/python2.6/site-packages/MoinMoin/log.py", line 92, in <module>
import logging.config
File "/usr/lib/python2.6/logging/config.py", line 30, in <module>
import sys, logging, logging.handlers, string, socket, struct, os, traceback, types
File "/usr/lib/python2.6/logging/handlers.py", line 27, in <module>
import logging, socket, types, os, string, cPickle, struct, time, re
ImportError: /usr/lib64/python2.6/lib-dynload/cPickle.so: undefined symbol: PyUnicodeUCS2_DecodeUTF8
그러나 Python 인터프리터에서 실패한 문을 수동으로 실행하면 문제가 없습니다.
$ python
'import site' failed; use -v for traceback
Python 2.6.6 (r266:84292, Feb 17 2011, 08:36:48)
[GCC 4.3.4 [gcc-4_3-branch revision 152973]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import logging, socket, types, os, string, cPickle, struct, time, re
>>>
Apache에서 실행할 때 이 오류가 발생하지만 명령줄에서 Python을 실행할 때는 발생하지 않는 이유는 무엇입니까?
편집: 다른 공유 라이브러리에 액세스하는 것 같습니다. Apache가 실행 중이고 /usr/lib64/python2.6/lib-dynload/cPickle.so
명령줄에서 호출한 Python 인터프리터도 실행 중입니다./usr/lib/python2.6/lib-dynload/cPickle.so
$ python -v
...
>>> import cPickle
dlopen("/usr/lib/python2.6/lib-dynload/cPickle.so", 2);
dlopen("/usr/lib/python2.6/lib-dynload/cStringIO.so", 2);
답변1
아시다시피 Apache(64비트)는 명령줄에서 다양한 Python 바이너리를 실행할 때 다양한 라이브러리를 로드합니다. Python2.6 64비트 설치를 위한 바이너리/라이브러리를 수정합니다. 이것은 사라져야합니다.