2011-05-08 31 views
9

Mi objetivo es configurar Python 3 con Apache. Mi mayor problema es adquirir mod_python.so. Por mi vida solo encontré un sitio donde se podía descargar (http://www.modpython.org/) y lo que obtuve fue un montón de archivos de compilación e instalación.¿Cómo usar Python 3 y Django con Apache?

No encuentro ninguna guía que explique cómo configurar Python 3 con Apache. Entonces, si alguien me puede guiar ahora, ¡Internet finalmente contendrá la solución!

+4

Apache Attic se creó en noviembre de 2008 para proporcionar procesos y soluciones para dejar en claro cuándo un proyecto Apache ha llegado al final de su vida útil. mod_python está en el ático. Use mod_wsgi – joaquin

Respuesta

13

Django 1.6+ y mod_wsgi 3.4+ son necesarios para utilizar Python 3 con Apache. Para obtener más detalles, consulte scot's answer.

+0

No entiendo por qué esto está subido. Menciona 'mod_wsgi', cierto, pero está lejos de ser un tutorial. En mi opinión, esto debería mencionarse como un comentario, así que puedo editar mi pregunta (que ahora tengo, haciendo esta respuesta bastante inútil) – Hubro

+3

No hay tutorial, no se puede hacer. Django no es compatible con Python 3. Supongo que podría negarse a aceptar la respuesta porque no es lo que quiere escuchar. Escuché a la gente hablar acerca de tratar de portar Django a Python 3 durante el verano, si quieres ver que eso suceda, es posible que quieras buscar ayuda. – zeekay

+0

Mi pedido fue un tutorial sobre cómo usar Python 3 con Apache (y Django). Eliminé la parte de Django ya que no es compatible con Python 3, pero eso fue solo una pequeña parte del punto. – Hubro

4

No se puede unser python3 con django. De preguntas frecuentes de Django: http://docs.djangoproject.com/en/dev/faq/install/#can-i-use-django-with-python-3

¿Puedo usar Django con Python 3?

No por el momento. Python 3.0 introdujo una serie de cambios incompatibles con el lenguaje Python, y aunque estos cambios son generalmente algo bueno para el futuro de Python, pasará un tiempo antes de que la mayoría del software Python alcance y sea capaz de ejecutarse en Python 3.0. Para un software más grande basado en Python como Django, se espera que la transición demore al menos uno o dos años (ya que implica dejar de recibir soporte para versiones anteriores de Python, por lo que debe hacerse gradualmente).

Mientras tanto, las versiones de Python 2.x serán soportadas y provistas de correcciones de errores y actualizaciones de seguridad por el equipo de desarrollo de Python, por lo que continuar utilizando una versión de Python 2.x durante la transición no debería representar ningún riesgo.

+0

Esa no era la pregunta, entonces ¿por qué votar hasta ahora? – Hubro

+0

@Codemonkey En realidad responde _ _Django con Apache _ parte de tu pregunta. –

9

Estas respuestas ya no son válidas para Django 1.6 - es compatible con python3. La página de mod_wsgi dice que la versión 3.4 admite python 3. https://code.google.com/p/modwsgi/

No sé si todo funciona en este momento (volveré y editaré cuando lo descubra).

¡La respuesta es SÍ, funciona!

I tienen una instancia AWS EC3 Ubuntu corriendo python3, Django 1.5.6, Apache2.2 y mod_wsgi 3,4

Python 3.3.4:

sudo add-apt-repository ppa:fkrull/deadsnakes 
sudo apt-get install python3.3 
sudo apt-get install python3.3-dev python3.3-doc idle-python3.3 

ppa: fkrull/deadsnakes es un repo apt tiene múltiples versiones de python disponibles - ver https://launchpad.net/~fkrull/+archive/deadsnakes

Luego agregué pip usando las instrucciones en la página de pip; http://pip.readthedocs.org/en/latest/installing.html. (recuerde que su python probablemente esté en su camino como 'python3.3' en este punto, plain 'python' apuntará a python 2.x!)

Después de eso, virtualenv. Luego, realicé la instalación de Python. Tras la activación y agregando el bin/directorio del entorno al $ PATH, ahora tengo un python3 limpio.

Luego, después de activar el env virtual, hice 'pip Django' y todos mis otros paquetes necesarios (que fueron bastantes). Tengo la versión 1.6.2 de Django (he estado desarrollando esto y me estoy ejecutando bajo Python 3.3.3 en mi Mac no hay problema).

El problema más grande que tuve fue la instalación de lxml porque requiere que se instalen libxml2 y libxslt con apt-get (es un envoltorio alrededor del código C) y me costó un par de intentos darme cuenta de que no estaban ya instalado (la compilación lxml falla).

Después de lanzar sobre la puesta en marcha y disponibilidad de mi instancia de base de datos RDS (postgresql, ¡cuidado con mysql en python3, obtendrá muchos problemas con el controlador db python! Pero la mayoría de mis problemas fueron causados ​​por intentar comprender AWS configuración de seguridad), que era la navegación relativamente sencillo:

sudo apt-get install apache2 apache2-threaded-dev 

que se instala Apache - y que necesita los paquetes dev para el siguiente bit.

Y ese punto, he intentado usar el paquete apto para mod_wsgi pero decidió que la mejor cosa que hacer era compilar e instalar yo mismo, siguiendo las instrucciones aquí - https://code.google.com/p/modwsgi/wiki/InstallationInstructions

No he tenido problemas con la configuración, hacer, o hacer la instalación. Asegúrese de compilarlo en su entorno activado virtualenv.

Hay que añadir manualmente la configuración de configuración de Apache:

# wsgi module 
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so 
# now configure it 
<Directory /my/app/path> 
<Files wsgi.py> 
    Order deny,allow 
    Allow from all 
</Files> 
</Directory> 
WSGIScriptAlias//my/app/path/wsgi.py 
WSGIPythonPath /my/app:/path/to/the/virtual/env/lib/python3.3/site-packages 

Y en la forma más amplia posible, que todo esto se encuentra trabajando.

2

que se enfrentaron a un problema similar y aquí es cómo lo resolví: instalar la lámpara:

sudo apt-get install lamp-server^ 
// then do more from here: 
    //https://help.ubuntu.com/community/ApacheMySQLPHP 
// If you will run python services then : 
     apt-get install python-mysqldb 
//and for python 3 install: 
    sudo apt-get install python3-pip python-dev build-essential 
    pip3.4 install mysqlclient // for mysql  connection 
    sudo apt-get install build-essential python-dev libmysqlclient-dev 

    pip3 install virtualenvwrapper 
    sudo nano ~/.bash_profile 
    //Set location of virtualenvs by pasting this in above: 
    export WORKON_HOME=$HOME/.virtualenvs 
    source /usr/local/bin/virtualenvwrapper.sh 
//Reload startup file: 
    source ~/.bash_profile 
    mkvirtualenv -p /usr/bin/python3 myprojectenv 
    workon myprojectenv 
//then you can install packages you want using pip 
//and copy myproject here 

para desplegar una Django 1.7 Aplicación en Ubuntu 14.04 servidor LTS con python3 y Apache:

sudo apt-get install libapache2-mod-wsgi-py3 
//then configure your apache virtualhosts(here our project is //myproject and environment is myprojectenv): 

Configure su máquina virtual en modo demonio que se recomienda:

<VirtualHost *:80> 
    ServerName yourdomain.com 
    ServerAdmin [email protected] 

    DocumentRoot /home/user/.virtualenvs/myprojectenv/public_html 


    <Directory /home/user/.virtualenvs/myprojectenv/myproject/myproject> 

    <Files wsgi.py> 
    Require all granted 
    </Files> 
    </Directory> 

    ErrorLog /home/user/.virtualenvs/myprojectenv/logs/error.log 
    CustomLog /home/user/.virtualenvs/myprojectenv/logs/access.log combined 
    WSGIScriptAlias//home/user/.virtualenvs/myprojectenv/myproject/myproject/wsgi.py 

    WSGIDaemonProcess myproject python- path=/home/user/.virtualenvs/myprojectenv/prisec:/home/user/.virtualenvs/m yprojectenv/lib/python3.4/site-packages 

    WSGIProcessGroup myproject 
    Alias /static /home/user/.virtualenvs/myprojectenv/public_html/static 

    <Directory /home/user/.virtualenvs/myprojectenv/public_html/static> 
    Require all granted 
    </Directory> 
    Alias /media 
    /home/user/.virtualenvs/myprojectenv/public_html/media 
     <Directory  /home/user/.virtualenvs/myprojectenv/public_html/media> 
    Require all granted 
    </Directory> 

Reiniciar Apache. los directorios en el archivo de configuración de virtualhost deben existir en el entorno virtual creado.

3

1) Lo primero que debemos hacer con nuestros archivos de proyecto recién creados es ajustar la configuración. Abra el archivo de configuración con el editor de texto:

gedit myproject/settings.py

En la parte inferior del archivo, vamos a añadir una línea para configurar este directorio. Django utiliza la configuración STATIC_ROOT para determinar el directorio al que deberían ir estos archivos. Vamos a utilizar un poco de Python para que lo utilice un directorio llamado "estática" en el directorio principal de nuestro proyecto:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

2) Podemos recoger todo el contenido estático en la ubicación del directorio configuramos escribiendo:

./manage.py collectstatic

Usted tendrá que confirmar la operación. Los archivos estáticos se colocarán en un directorio llamado static dentro de su directorio de proyecto.

3) Necesita el adaptador mod-wsgi para configurar Django en Apache instalar wsgi lib como a continuación.

sudo apt-get install libapache2-mod-wsgi sudo a2enmod wsgi

4) En la parte inferior del archivo, /etc/apache2/sites-available/000-default.conf

WSGIPythonPath /var/www/html/myproject/ 
WSGIProcessGroup myproject 
WSGIScriptAlias//var/www/html/myproject/myproject/wsgi.py 


    Alias /static /var/www/html/myproject/static/ 

<Directory /var/www/html/myproject/static> 
    Require all granted 
</Directory> 

<Directory /var/www/html/myproject/myproject> 
    <Files wsgi.py> 
     Order deny,allow 
     Require all granted 
    </Files> 
</Directory> 

Alias /media/ /var/www/html/myproject/media/ 
<Directory /var/www/html/myproject/media> 
Require all granted 
</Directory> 
WSGIDaemonProcess myproject python-path=/var/www/html/myproject/ 

5) reiniciar el servidor apache2:

sudo service apache2 restart 

6) Ahora vaya a Localhost:

¡Bingo! Ya estás listo para Django con apache.

+0

Esta es una muy buena respuesta. Lo suficientemente bueno, de hecho, que pensé que era una prueba en la cola de revisión. Buen trabajo. –