with python3 mod_wsgi how and django apache configuration install mod-wsgi

python3 - ImportError: no hay ningún módulo llamado django.core.handlers.wsgi en la instalación django mod_wsgi config en apache



python3 django apache (10)

Intenté instalar django para que funcione con apache y mod_wsgi, pero aparece este error:

ImportError: No module named django.core.handlers.wsgi,

He leído que puede ser un error del usuario ...

En la consola (ssh), con acceso raíz, no tengo ningún problema para acceder a django.core.handlers.wsgi, pero cuando apache solicita acceso, no puede

Mi django.wsgi:

import os import sys sys.path.append(''my/rep/parents/of/my/project'') sys.path.append(''/usr/lib/python2.4/site-packages/django'') os.environ[''DJANGO_SETTINGS_MODULE''] = ''montest.settings'' os.environ[''PYTHON_EGG_CACHE''] = ''/tmp'' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()

Mi vhost.conf:

Alias /media/ my/rep/parents/of/my/projet/montest/media/ <Directory my/rep/parents/of/my/projet/montest/media> Order deny,allow Allow from all </Directory> WSGIScriptAlias /montest my/rep/parents/of/my/projet/django.wsgi <Directory my/rep/parents/of/my/projet> Order deny,allow Allow from all </Directory>

EDITAR:

Ok mi resultado para ldd mod_wsgi.so

linux-gate.so.1 => (0x0013c000) libpython2.6.so.1.0 => /usr/lib/libpython2.6.so.1.0 (0x00663000) libpthread.so.0 => /lib/libpthread.so.0 (0x00bff000) libdl.so.2 => /lib/libdl.so.2 (0x0023b000) libutil.so.1 => /lib/libutil.so.1 (0x00420000) libm.so.6 => /lib/libm.so.6 (0x00110000) libc.so.6 => /lib/libc.so.6 (0x00240000) /lib/ld-linux.so.2 (0x0059f000)

Así que decido probar mi instalación de mod_wsgi con el test.wsgi

test.wsgi

def application(environ, start_response): status = ''200 OK'' output = ''Hello world, I am a wsgi app!'' response_headers = [(''Content-Type'', ''text/plain''), (''Content-Length'', str(len(output)))] start_response(status, response_headers) return [output]

my vhost.conf:

WSGIScriptAlias /test /var/www/vhosts/mydomain.fr/subdomains/django/httpdocs/test.wsgi <Directory /var/www/vhosts/mydomain.fr/subdomains/django/httpdocs> Order allow,deny Allow from all Options +ExecCGI </Directory>

Ahora funciona ... a continuación intentaré con mi configuración django.wsgi


¡Hola!

Si usa deb-distributive de Linux (Debian, Ubuntu, etc.), edite el archivo

/etc/apache2/modules/wsgi.load

Este archivo contenía una ruta para corregir wsgi-library (para la versión activa del intérprete de Python). Si usa Python2.6, cambie la cadena

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-2.7

a

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-2.6

Además, puede cambiar el enlace de software al módulo mod_wsgi:

cd /usr/lib/apache2/modules ln -s mod_wsgi.so-2.6 mod_wsgi.so

No olvide cambiar el enlace al archivo en /etc/apache2/modules/wsgi.load y reiniciar el servidor apache

service apache2 restart

PD: lo siento por mi mal inglés


¿Por qué estás tratando de agregar el directorio site-packages a sys.path? Si su mod_wsgi está compilado contra Python 2.4, entonces ya debería estar buscando en el directorio site-packages. Parece que tu mod_wsgi ni siquiera está compilado contra Python 2.4.

Correr:

ldd mod_wsgi.so

contra su archivo instalado mod_wsgi.so para averiguar para qué versión de Python se compila y publicar el resultado.


Esta línea es ciertamente incorrecta:

sys.path.append(''/usr/lib/python2.4/site-packages/django'')

Instala Django con / para la versión de Python sobre la que se creó el mod_wsgi.


He tenido este problema antes, y fue porque el proceso de Apache / mod_wsgi no tenía permiso para leer los módulos. Puede hacer que su directorio site-packages / django sea legible por todo el mundo, o agregar otros permisos de usuario / grupo apropiados.


Incorrecto:

WSGIDaemonProcess www.example.com python-path=~/virtualenvs/virt1/lib/python2.7

Derecha:

WSGIDaemonProcess www.example.com python-path=/home/user/virtualenvs/virt1/lib/python2.7

Pasé demasiado tiempo tratando de descubrir por qué mi virtualenv no estaba cargando django correctamente.


Resolví el problema agregando la ubicación de los paquetes del sitio, donde he guardado el subdirectorio django (/Library/python/2.7/site-packages) en WSGIDaemonProcess:

WSGIDaemonProcess www.example.com processes=2 threads=15 display-name=%{GROUP} python-path=/Library/python/2.7/site-packages

Si está utilizando el modo de servidor incorporado, use httpd.conf :

WSGIPythonPath /Library/python/2.7/site-packages


Resolví este problema agregando el directorio principal que contiene mi instalación django a sys.path en wsgi.py. Aquí está mi configuración, FWIW:

/home/banjer/myproject/wsgi.py :

import os, sys sys.path.append(''/home/banjer/django'') sys.path.append(''/home/banjer'') # this line solved it sys.executable = ''/usr/local/python-2.7.2/bin/python'' os.environ[''DJANGO_SETTINGS_MODULE''] = ''myproject.settings'' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()


Sé que esta es una pregunta un tanto vieja, pero pensé que me gustaría avisarles a los futuros usuarios de SO que podrían encontrar esta pregunta:

Su mod_wsgi está vinculado a python2.6, sin embargo, ¿está utilizando python 2.4 para ejecutar django de acuerdo con su configuración?

Voy a suponer que tu / usr / bin / python está apuntando a algo más que el 2.6, que es con lo que se compila mod_wsgi. También podría deberse al hecho de que está ejecutando django contra 2.4. Recibí el mismo error cuando estaba cargando mod_wsgi vinculado contra python2.6 cuando django estaba usando python2.7. Con la versión de mod_wsgi que he instalado, venía con soporte para python2. [6-7], así que todo lo que tenía que hacer era eliminar el enlace simbólico en / usr / lib / apache2 / modules / para mod_wsgi.so -> mod_wsgi .so-2.6 y cámbielo a mod_wsgi.so -> mod_wsgi.so-2.7.

Suficientemente fácil.


Sería una mejor idea si elimina django de su antigua biblioteca de Python.

[root@lts5srv1]# rm -rf /root/epd-5.1.0/lib/python2.5/site-packages/django

..y vuelva a instalarlo dentro de la carpeta ''site-packages'' del python actual que está utilizando:

[root@lts5srv1 Django-1.4.1]# /usr/local/bin/python2.6 setup.py install

¡Eso es lo que hice y ya no recibo ese error!


Verifique los permisos del archivo de su paquete de sitio. Ninguna de las soluciones anteriores funcionó para mí hasta que arreglé los permisos de los archivos. Esto es lo que está en mi archivo ssl_error_log:

mod_wsgi (pid=986, process=''OSQA'', application=''xxxxxx.yyy.com|/forum''): Loading WSGI script ''/data/http/osqa/osqa.wsgi''. mod_wsgi (pid=986): Target WSGI script ''/data/http/osqa/osqa.wsgi'' cannot be loaded as Python module. mod_wsgi (pid=986): Exception occurred processing WSGI script ''/data/http/osqa/osqa.wsgi''. Traceback (most recent call last): File "/data/http/osqa/osqa.wsgi", line 14, in <module> import django.core.handlers.wsgi ImportError: No module named django.core.handlers.wsgi

Pero lo resolví en mi servidor. Si puede hacer esto en la línea de comando, entonces esta solución es para usted:

python >>> import django.core.handlers.wsgi >>>

Lo que funcionó fue que chmod go + rx site-packages libpython * (esto podría ser exagerado, pero funcionó para mí).

Me estoy ejecutando como httpd como apache.user, y ejecutando python como root, podría ver los paquetes muy bien, pero mis permisos no estaban configurados correctamente (para que los lea todo el mundo), y es por eso que httpd no pudo leer los paquetes.