У меня есть сервер разработки для моего приложения Django под управлением Cent OS 6. Я обслуживаю приложение, используя Apache и mod_wsgi. Я много читал о Python по умолчанию, который поставляется с Cent, поэтому я установил альтернативный Python 2.7.6 из исходников и скомпилировал его с --enable-shared. Я также установил mod_wsgi из исходного кода и указал на новую установку Python.
Однако каждый раз, когда я пытаюсь запустить приложение, я получаю следующую ошибку от lxml:
..lib/python2.7/site-packages/lxml/objectify.so: undefined symbol: PyUnicodeUCS2_Format
Еще одна примечательная черта ошибки заключается в том, что используемый исполняемый файл Python не является желаемым:
Python Executable: /usr/bin/python
вместо / home / jenkins / local / bin / python
Я искал это часами, но безрезультатно.
Как я могу это решить ?? Заранее спасибо.
Вы пытаетесь использовать версию lxml, скомпилированную для одной установки Python, для другой установки Python. Две установки Python не совпадают. В частности, один lxml был скомпилирован с 16-битной шириной символа Unicode, указанной при компиляции самого Python. Используемая среда выполнения Python была скомпилирована для 32 символов, но с шириной символа Unicode. Следовательно, он потерпит неудачу.
Вам нужно проверить, какую разделяемую библиотеку Python mod_wsgi фактически использует во время выполнения, и является ли она правильной. Чтобы узнать, как это сделать, см .:
Если он выбирает неправильную библиотеку, mod_wsgi необходимо перекомпилировать для правильной установки Python, но где LD_RUN_PATH
переменная среды устанавливается, как описано в документе.
Следующее, что вам нужно проверить, это то, что вы не указываете mod_wsgi использовать виртуальную среду Python, которая была создана для другой установки Python, чем та, которую использует mod_wsgi.
И последнее, что вы можете сделать, это убедиться, что вы создаете собственную установку Python с 32-битными символами Unicode. Когда вы собираете Python из исходного кода, по умолчанию используется 16 бит. В Linux собственные установки Python дистрибутивов всегда компилируются для 32-битного Unicode, поэтому вы столкнулись с этой проблемой, когда начали смешивать установки Python.
В apache установите путь к исполняемому файлу python с помощью директивы WSGIPythonHome
:
WSGIPythonHome /home/jenkins/local/bin/