¿Cómo configura los scripts de Python para que funcionen en Apache 2.0?

Intenté seguir un par de tutoriales en Google sobre la configuración de mod_python, pero siempre fallaba. ¿Tienes una buena guía paso a paso, sólida como una roca?

Mi caja de desarrollo es OS X, producción – Centos.

Hay dos formas principales de ejecutar Python en Apache. Lo más simple sería usar CGI y escribir scripts de Python normales, mientras que el segundo es usar un marco web como Django o Pylons.

Usar CGI es sencillo. Asegúrese de que su archivo de configuración de Apache tenga configurado cgi-bin. Si no, siga su documentación ( http://httpd.apache.org/docs/2.0/howto/cgi.html ). En ese momento, todo lo que debe hacer es colocar sus scripts de Python en el directorio cgi-bin y la salida estándar se convertirá en la respuesta HTTP. Consulte la documentación de Python para obtener más información ( https://docs.python.org/library/cgi.html ).

Si desea utilizar un marco web, deberá configurar mod_python o FastCGI. Estos pasos dependen del marco que desee utilizar. Django proporciona instrucciones claras sobre cómo configurar mod_python y Django con Apache ( http://www.djangoproject.com/documentation/modpython/ )

Sí, mod_python es bastante confuso de configurar. Así es como lo hice.

En httpd.conf:

LoadModule python_module modules/mod_python.so  AddHandler mod_python .py PythonHandler myapp PythonDebug On 

y en su directorio de aplicaciones:

 $ /serverbase/htdocs/myapp$ ls -l total 16 -r-xr-xr-x 1 root sys 6484 May 21 15:54 myapp.py 

Repita la configuración para cada progtwig de python que desee ejecutar en mod_python.

¿Está ejecutando Python en UNIX o Windows?

Una alternativa a mod_python y FastCGI es mod_wsgi. Puedes encontrar más información en modwsgi

He construido e instalado esto en Solaris sin problemas. Anteriormente había probado mod_python pero tuve problemas con las bibliotecas compartidas como parte de la comstackción. Hay buenos documentos de instalación disponibles.

El problema para mí no estaba en la configuración de Apache, pero al entender cómo mod_apache realmente usa los archivos .py. Las instrucciones a nivel de módulo (incluidas las de la if __name__=='__main__' ) no se ejecutan: asumí que el stdout de ejecutar el script en la línea de comandos sería lo que produciría el servidor, pero no es así como funciona.

En su lugar, escribí una función de nivel de módulo llamada index() , y le devolví como una cadena el HTML de la página. También es posible tener otras funciones de nivel de módulo (por ejemplo, otherFunction() ) a las que se puede acceder como segmentos adicionales en el URI (por ejemplo, testScript/otherFunction para el archivo testScript.py .)

Obviamente, esto tiene más sentido que mi concepción original de stdout. Mejor capacidad de utilizar realmente Python como lenguaje de scripting y no como un lenguaje de marcado enorme.