Разрабатывает ли 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()
Я получил эту ошибку.
[Wed Nov 24 10:36:45 2010] [error] [client 127.0.0.1] ImportError: Could not import settings 'mysite.settings' (Is it on sys.path? Does it have syntax errors?): No module named 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
Итак, я скопировал проект "mysite" django на "/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 при запуске? Если да, то как это предотвратить? Если нет, то почему Django не знает о моем добавленном пути?
Это система, которую я использую.
OS : Mac OS X 10.6.5
Python : 2.6.1
Django : 1.2.3
решаемые
Обратитесь к моему другому ПО. Короче говоря, я перенес проект django в каталог www doc, доступный из Интернета, все в порядке.
Ответы
Ответ 1
Вы только убедитесь, что "/Users/smcho/Desktop/django/mysite" находится в sys.path
, но если вы не добавите это, и "/Users/smcho/Desktop/django". Чтобы импортировать mysite.settings
, Python нуждается в последнем, а не в первом. Поэтому вы должны обязательно добавить это.