SystemError: dynamic module not initialized properly
- это исключение, которое выдается, когда загружаемая dll (или .so) не может быть должным образом инициализирована. В функции _PyImport_LoadDynamicModule
из Python/importdl.c
на случай, если кому-то будет интересно.
Теперь рассматриваемая dll / so (динамический модуль в языке Python) - это _functools.so
, который является частью стандартной библиотеки Python. Я вижу, что он загружается из /opt/python2.6, поэтому мы знаем, что это не системный питон. Я предполагаю, что это не тот питон, против которого был скомпилирован mod_wsgi. Чтобы проверить, так ли это, выполните ldd mod_wsgi.so
и посмотрите, что libpython
возвращается.
Поэтому я предлагаю либо перекомпилировать mod_wsgi снова, так и интерпретатор в /opt/python2.6, запустив в исходном каталоге wsgi_mod
./configure --with-python=/opt/python2.6/bin/python2.6
или убедитесь, что sys.prefix
указывает на установку python, которую ожидает mod_wsgi, установив его значение в каталоге WSGIPythonHome
.
ОБНОВЛЕНИЕ после вывода ldd
Вторая строка в выводе ldd показывает, что mod_wsgi загружает pythonlib в /usr/lib
вместо /opt/python2.6
. Чтобы указать mod_wsgi загрузить его в /opt/python2.6
, вам, вероятно, следует добавить его к переменной LD_LIBRARY_PATH
envirnoment.
Попробуйте сначала в командной строке:
LD_LIBRARY_PATH=/opt/python2.6/lib:$LD_LIBRARY_PATH ldd mod_wsgi.so
и затем убедитесь, что в скрипте, запускающем Apache, указан правильный LD_LIBRARY_PATH.
Еще одно обновление
Вам нужно будет отладить конфигурацию mod_wsgi. Просто попробуйте использовать следующий .wsgi
файл вместо своего и сообщите нам, что вы получите:
def application(environ, start_response):
status = '200 OK'
start_response(status, [('Content-type', 'text/plain')])
try:
import sys
return ['\n'.join([sys.prefix, sys.executable])]
except:
import traceback as tb
return [tb.format_exc()]
Если то, что вы получаете, не `/opt/python2.6 ', попробуйте с опцией
WSGIPythonHome /opt/python2.6
См. Также http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives