Назад | Перейти на главную страницу

Почему httpd, похоже, использует другую версию Python с тем же исполняемым файлом?

Я запускаю Apache httpd 2.4.4 на машине RedHat 5. Я использую Django и использую mod_wsgi. У меня Python 2.4.3 установлен в / usr / bin, а Python 2.7.6 установлен в / usr / local / bin, и я хочу использовать 2.7.6. Я собрал 2.7.6 из исходников, а также построил mod_wsgi-3.4.

Я создал virtualenv, используя 2.7.6, и из командной оболочки python -V сообщает мне, что он использует 2.7.6 (после выполнения . virtpy/bin/activate). Бег import sys; sys.version показывает мне также 2.7.6 и sys.executable показывает мне /www/sqla/virtpy/bin/python.

Когда я запускаю его из httpd, у меня возникают проблемы с загрузкой библиотек, и когда я смотрю на sys.version, Я вижу 2.7.3. Странно то, что sys.executable все еще показывает мне /www/sqla/virtpy/bin/python, точно такой же, как я вижу из командной оболочки.

В частности, когда python пытается загрузить _socket, я вижу эту ошибку из httpd:

ImportError: /www/sqla/virtpy/lib/python2.7/lib-dynload/_socket.so: undefined symbol: _PyInt_AsInt

Если я попытаюсь импортировать _socket из командной оболочки, проблем нет. у меня есть . /www/sqla/virtpy/bin/activate в моем / etc / sysconfig / httpd и перезапустили Apache с этим изменением.

Как один и тот же исполняемый файл может давать разные версии python? Как я могу убедить его использовать правильный?

Используйте проверки, описанные в документации mod_wsgi, чтобы убедиться, что ваш mod_wsgi был скомпилирован правильно:

Убедитесь, что при выполнении этой проверки, что LD_LIBRARY_PATH не установлен. Обеспечьте вывод ldd.

Также укажите, есть ли у вас установка Python 2.7 в / usr в дополнение к той, что находится в / usr / local, и, в частности, есть ли где-либо общая библиотека Python 2.7 в / usr / lib.

Если вы использовали директиву WSGIPythonHome в конфигурации Apache, скажите, что вы установили.