Изменяет ли Django или mod_wsgi файл sys.path при запуске?

Я установил mod_wsgi, и проверил, что он работает нормально. Я также придумал простой проект django, и также проверил, что он работает нормально с помощью следующей команды

django-admin.py runserver --settings=mysite.settings

Тем не менее, когда я запускаю следующие wsgi,

import os
import sys

mysite = '/Users/smcho/Desktop/django/mysite'
if mysite not in sys.path:
    sys.path.insert(0,'/Users/smcho/Desktop/django/mysite')
django = '/Users/smcho/Desktop/django'
if django not in sys.path:
    sys.path.insert(0,'/Users/smcho/Desktop/django')

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Я получил эту ошибку.

[Ср 24 ноября 10:36:45 2010] [ошибка] [клиент 127.0.0.1] ImportError: Не удалось импортировать настройки "mysite.settings" (находится в sys.path? Есть ли синтаксические ошибки?): Модуль не указан mysite.settings

Запустив следующий код на python с mod_wsgi, я узнал, что "/Library/Python/2.6/site-packages" находится в sys.path.

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World! WSGI working perfectly!\n'*10
    for i in sys.path:
        output += str(i) + '\n'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

И это тот sys.path, который я получил. У него нет пути от PYTHONPATH.

/Library/Python/2.6/site-packages/ply-3.3-py2.6.egg...
/Library/Python/2.6/site-packages/nose-0.11.4-py2.6.egg
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload
/Library/Python/2.6/site-packages 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/wx-2.8-mac-unicode

Итак, я скопировал проект django "mysite" в "/Library/Python/2.6/site-packages", и теперь он работает нормально.

Что с этим не так? Вполне вероятно, что даже если я добавил каталог проекта django в sys.path, django не знает (или игнорирует) этот путь и пути из переменной среды PYTHONPATH.

    sys.path.insert(0,'/Users/smcho/Desktop/django/mysite')
    sys.path.insert(0,'/Users/smcho/Desktop/django')

Изменяет ли Django файл sys.path при запуске? Если так, как это предотвратить? Если нет, то почему Джанго не знает о моем добавленном пути?

Это система, которую я использую.

ОС: Mac OS X 10.6.5
Python: 2.6.1
Джанго: 1.2.3

РЕШИТЬ

Пожалуйста, обратитесь к моей другой PO. Короче говоря, я переместил свой проект django в каталог www doc, который доступен из Интернета, все в порядке.

1 ответ

Вы только проверяете, что /Users/smcho/Desktop/django/mysite находится в sys.path, но если нет, то добавьте это и в '/Users/smcho/Desktop/django'. Импортировать mysite.settingsPython нуждается во втором, а не в первом. Так что вы должны быть уверены, что добавили это.

Другие вопросы по тегам