Установите mod_python для Apache 2.2.21, Python 2.5.4 в Mac OS X 10.6 - PullRequest
2 голосов
/ 17 ноября 2011

Мне удалось успешно установить apache & python из исходного кода.

Я установил mod_python с помощью следующей команды настройки:

./configure --prefix=/usr/local/python/lib/python2.5/site-packages/mod_python --with-apxs=/usr/local/apache/bin/apxs --with-python=/usr/local/python/bin/python2.5

Я скопировал свой тестовый файл (mptest.py) в htdocs/ test папка, вот мой mptest:

from mod_python import apache

def handler(req):
      req.log_error('handler')
      req.content_type = 'text/plain'
      req.send_http_header()
      req.write('mptest.py\n')
      return apache.OK

также я скопировал мой .htaccess в папку htdocs / test, вот мой .htaccess:

AddHandler mod_python .py

PythonHandler mptest

PythonDebug On

Я получаю ошибку, Ошибка интернет-сервера и следующее - мой журнал ошибок apache:

[Wed Nov 16 17:10:48 2011] [notice] mod_python: Creating 8 session mutexes based on 256 >max processes and 0 max threads.

[Wed Nov 16 17:10:48 2011] [notice] mod_python: using mutex_directory /tmp 

[Wed Nov 16 17:10:48 2011] [notice] Apache/2.2.21 (Unix) PHP/5.2.17 mod_python/3.3.2-dev-20080819 Python/2.5.4 configured -- resuming normal operations

[Wed Nov 16 17:11:00 2011] [error] make_obcallback: could not import mod_python.apache.\n
ImportError: No module named mod_python.apache

[Wed Nov 16 17:11:00 2011] [error] make_obcallback: Python path being used "['/Library/Python/2.5/site-packages/setuptools-0.6c11-py2.5.egg', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload', '/Library/Python/2.5/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjC', '/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/wx-2.8-mac-unicode']".

[Wed Nov 16 17:11:00 2011] [error] get_interpreter: no interpreter callback found.

[Wed Nov 16 17:11:00 2011] [error] [client ::1] python_handler: Can't get/create interpreter., referer: http://localhost/test/

мой mod_python.so связан с системным python, который я не хочу, доказательство приведено ниже.Как я могу связать его с Python, установленным мной?

Mac-Pro:~ user$ otool -L /usr/local/apache/modules/mod_python.so 

/usr/local/apache/modules/mod_python.so:
    /System/Library/Frameworks/Python.framework/Versions/2.5/Python (compatibility version 2.5.0, current version 2.5.4)

/ usr / lib / libSystem.B.dylib (совместимость версия 1.0.0, текущая версия 125.0.0) / usr / lib/libgcc_s.1.dylib (совместимость версия 1.0.0, текущая версия 625.0.0)

Я просто хочу отобразить mptest.py в своем веб-браузере, может ли кто-нибудь мне помочь?

Я знаю, что mod_wsgi - лучший вариант, чем mod_python, но мне нужно, чтобы mod_python работал.Я попробую mod_wsgi позже.

Спасибо.

1 Ответ

1 голос
/ 17 ноября 2011

Боюсь, я не могу помочь с mod_python. Мы переключили весь наш код с mod_python в пользу mod_wsgi и никогда не оглядывались назад.

У mod_wsgi есть несколько замечательных функций - не говоря уже о способности легко создавать отладочный / диагностический код, который можно полностью запустить из python без проблем с запуском Apache (что открывает возможность запуска отладчиков и печати непосредственно в stdout).

Если вы идете по пути wsgi, рассмотрите возможность использования webob для управления объектами запроса / ответа.

Вот как вы можете написать свой пример в mod_wsgi

# --------- EXAMPLE ----------

from webob import Response

def application(environ, start_response):
    res = Response()
    res.content_type = 'text/plain'
    res.body = "mptest.py\r\n"
    return res(environ, start_response)

Удачи.

...