2010-11-12 22 views
5

Estoy usando Apache + mod-wsgi.Cargar módulo en apache + mod-wsgi

En mi httpd.conf, estoy teniendo las siguientes líneas adicionales al final del archivo.

LoadModule wsgi_module modules/mod_wsgi-win32-ap22py27-3.3.so 
WSGIScriptAlias/"C:/Projects/Folder/web/" 
<Directory "C:/Projects/Folder/web"> 
AllowOverride None 
Options None 
Order deny,allow 
Allow from all 
</Directory> 

Cuando ejecuto los index.py guiones siguientes en Windows a través http://localhost/script/index.py

def application(environ, start_response): 
    status = '200 OK' 
    output = 'Hello World!' 
    response_headers = [('Content-type', 'text/plain'), 
         ('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 
    return [output] 

funciona bastante bien.

Sin embargo, cuando agrego import utils en la primera línea de index.py, me sale

ImportError: No module named utils 

utils.py hay mismo directorio que index.py

es cualquier configuración adicional necesito fijar?

Trato sugerencia dada por @dan_waterworth

import sys, os 
sys.path.append(os.path.dirname(__file__)) 

consigo no más de error mediante la importación de mi propio módulo. Sin embargo, cuando importo el módulo que se está instalando a través de easy_install, ocurre un error.

File "C:/Projects/Folder/web/script\\connection.py", line 1, in <module> 
    import psycopg2 
    File "build\\bdist.win32\\egg\\psycopg2\\__init__.py", line 65, in <module> 
    from psycopg2 import tz 
ImportError: cannot import name tz 

import psycopg2 ejecutados ningún problema, si este script se ejecuta como una aplicación independiente.

Respuesta

6

Me parece que tengo que agregar algunas líneas para anexar la ruta de Python. Algo como:

import sys, os 
sys.path.append(os.path.dirname(__file__)) 

import utils 

para la segunda parte, simplemente agregue líneas adicionales para sus directorios de importación. es decir:

sys.path.append([enter path here]) 

para encontrar sus directorios de importación, en un símbolo del tipo pitón interactivo:

import sys 
print sys.path 
+1

11 segundos antes, más amplia y una solución más genérica :) 1 – soulseekah

+0

consigo NameError: nombre de 'os' no está definido –

+0

lo siento, se me olvidó añadir OS a la importación, trate ahora –

0

sys.path y sys.modules para comprobar si el directorio se agrega en realidad como un directorio de módulos. Si no es sys.path.append.

+1

No es realmente necesario verificarlo. Python solo usará el primero que funcione; si hay duplicados, desperdicia una pequeña fracción de segundo como máximo y el código es más fácil de leer. –

+0

Quise decir eso para que él analice la situación. Quizás el directorio realmente existe en 'sys.path' en primer lugar y el problema no está en la importación. De lo contrario, gracias. – soulseekah

+1

en ese caso es un buen consejo –

1

Las otras respuestas se centran en lograr que el script destruya su propia PYTHONPATH. Otro enfoque es determinar la configuración correcta de Apache que configurará una ruta viable para las aplicaciones de Python y WSGI.

Tengo estos en mi archivo de configuración:

PassEnv PYTHONPATH 
WSGIPythonHome C:/Python/Python26 
WSGIPythonPath C:/Python/Python26;C:/myproject/PyLib 

Si no desea pasar PYTHONPATH de su entorno, creo que se puede utilizar:

SetEnv PYTHONPATH C:/your/paths/go/here;C:/and/here 

le sugiero que dar a estos una Disparo.

Cuestiones relacionadas