2010-11-12 19 views
5

Używam Apache + mod-wsgi.Załaduj moduł do apache + mod-wsgi

W moim httpd.conf, mam następujące dodatkowe linie na końcu pliku.

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> 

Kiedy wykonać następujące index.py skryptów w systemie Windows poprzez 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] 

działa całkiem w porządku.

Jednak kiedy dodać import utils na pierwszej linii index.py, mam

ImportError: No module named utils 

utils.py jest taka sama jak katalog index.py

Czy istnieje dodatkowa konfiguracja muszę ustawić?

staram sugestie podane przez @dan_waterworth

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

otrzymuję błąd nie więcej importując własne moduł. Jednak, gdy importuję moduł, który jest instalowany przez easy_install, pojawia się błąd.

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 wykonywane nie ma problemu, jeśli ten skrypt jest wykonywany jako samodzielna aplikacja.

Odpowiedz

6

Uważam, że muszę dodać kilka linii, aby dołączyć ścieżkę python. Coś jak:

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

import utils 

dla drugiej części, po prostu dodaj dodatkowe linie do swoich katalogów importu. tj:

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

znaleźć katalogów, typ importu do interaktywnego wiersza Pythona:

import sys 
print sys.path 
+1

11 sekund przed, szersze i bardziej ogólne rozwiązanie :) +1 – soulseekah

+0

uzyskać NameError: nazwa „os” nie jest zdefiniowane –

+0

przepraszam, zapomniałem dodać os do importu, spróbuj teraz –

0

sys.path i sys.modules, by sprawdzić, czy katalog jest rzeczywiście dodany jako katalogu modułu. Jeśli nie, to jest to sys.path.append.

+1

Nie jest konieczne sprawdzanie. Python po prostu użyje pierwszego, który działa, jeśli jest duplikat, to marnuje on niewielki ułamek sekundy, a kod jest łatwiejszy do odczytania. –

+0

Miałem na myśli to, aby przeanalizować sytuację. Być może katalog faktycznie istnieje w 'sys.path', a problem nie występuje w importowaniu. W przeciwnym razie dzięki. – soulseekah

+1

w takim przypadku to dobra rada –

1

Pozostałe odpowiedzi koncentrują się na tym, aby sam skrypt zmieścił się w swojej własnej PYTHONPATH. Innym podejściem jest znalezienie odpowiednich ustawień Apache, które ustawią funkcjonalną ścieżkę dla aplikacji Python i WSGI.

mam je w moim pliku conf:

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

Jeśli nie chcesz przekazać PYTHONPATH danym środowisku jest, myślę, że można użyć:

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

Proponuję dać te A strzał.