Ошибка при развертывании Django на Apache

У меня есть небольшой сайт Django, который я пытаюсь запустить на HTTP-сервере Apache 2.2. Приложение работает нормально, используя «python manage.py runningerver».

Версия Django: 1.0.2 final
Python: 2.5
ОС: Windows 2000

Я не выполнил шаги, описанные в документации, и после некоторых попыток, вышел со следующим в моем httpd.conf.

<Location "/therap/"> SetHandler python-program PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE settings PythonOption django.root /therap PythonDebug On PythonPath "['D:/therap/therap'] + sys.path" </Location> MaxRequestsPerChild 1 

D: \ therap \ therap – это место, где находится мой manage.py.

Когда я пытаюсь открыть в своем браузере, я вижу ошибку в стиле, используемом Django (в отличие от черного курьера на белом фоне).

 ImportError at / No module named therap.urls Request Method: GET Request URL: http://****:8080/ Exception Type: ImportError Exception Value: No module named therap.urls Exception Location: C:\python25\lib\site-packages\django\core\urlresolvers.py in _get_urlconf_module, line 200 Python Executable: C:\Programme\Apache Software Foundation\Apache2.2\bin\httpd.exe Python Version: 2.5.1 Python Path: ['D:/therap/therap', 'C:\\WINNT\\system32\\python25.zip', 'C:\\Python25\\Lib', 'C:\\Python25\\DLLs', 'C:\\Python25\\Lib\\lib-tk', 'C:\\Programme\\Apache Software Foundation\\Apache2.2', 'C:\\Programme\\Apache Software Foundation\\Apache2.2\\bin', 'C:\\Python25', 'C:\\Python25\\lib\\site-packages', 'C:\\Python25\\lib\\site-packages\\pyserial-2.2', 'C:\\Python25\\lib\\site-packages\\win32', 'C:\\Python25\\lib\\site-packages\\win32\\lib', 'C:\\Python25\\lib\\site-packages\\Pythonwin', 'C:\\Python25\\lib\\site-packages\\wx-2.8-msw-unicode'] Server time: Mo, 23 Mär 2009 16:27:03 +0100 

В папке D: \ therap \ therap есть urls.py. Однако нет в D: \ therap \ therap \ main, где большая часть моего кода.

Затем я попытался использовать родительскую папку

 <Location "/therap/"> SetHandler python-program PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE therap.settings PythonOption django.root /therap PythonDebug On PythonPath "['D:/therap'] + sys.path" </Location> MaxRequestsPerChild 1 

Который дал мне другую ошибку:

 MOD_PYTHON ERROR ProcessId: 2424 Interpreter: '***' ServerName: '****' DocumentRoot: 'C:/Programme/Apache Software Foundation/Apache2.2/htdocs' URI: '/therap/' Location: '/therap/' Directory: None Filename: 'C:/Programme/Apache Software Foundation/Apache2.2/htdocs/therap' PathInfo: '/' Phase: 'PythonHandler' Handler: 'django.core.handlers.modpython' Traceback (most recent call last): File "C:\Python25\Lib\site-packages\mod_python\importer.py", line 1537, in HandlerDispatch default=default_handler, arg=req, silent=hlist.silent) File "C:\Python25\Lib\site-packages\mod_python\importer.py", line 1229, in _process_target result = _execute_target(config, req, object, arg) File "C:\Python25\Lib\site-packages\mod_python\importer.py", line 1128, in _execute_target result = object(arg) File "C:\Python25\lib\site-packages\django\core\handlers\modpython.py", line 228, in handler return ModPythonHandler()(req) File "C:\Python25\lib\site-packages\django\core\handlers\modpython.py", line 201, in __call__ response = self.get_response(request) File "C:\python25\Lib\site-packages\django\core\handlers\base.py", line 67, in get_response response = middleware_method(request) File "C:\python25\Lib\site-packages\django\middleware\locale.py", line 17, in process_request translation.activate(language) File "C:\python25\Lib\site-packages\django\utils\translation\__init__.py", line 73, in activate return real_activate(language) File "C:\python25\Lib\site-packages\django\utils\translation\trans_real.py", line 209, in activate _active[currentThread()] = translation(language) File "C:\python25\Lib\site-packages\django\utils\translation\trans_real.py", line 198, in translation default_translation = _fetch(settings.LANGUAGE_CODE) File "C:\python25\Lib\site-packages\django\utils\translation\trans_real.py", line 183, in _fetch app = __import__(appname, {}, {}, []) ImportError: No module named main 

Я использую модуль интернационализации, но я не понимаю, почему это вызывает проблему на данный момент.

«main» – это имя единственного приложения Django (содержащего представления, модели, формы и т. д.). Полный путь: D: \ therap \ therap \ main.

Я поместил __init__.py-файлы всюду из основной папки в d: \ therap.

Теперь я не знаю, что еще я мог сделать. Есть идеи?

  • Запуск Scapy на Windows с Python 2.7
  • Мне нужно руководство для новичков по настройке окон для разработки python
  • lxml: Ошибка загрузки DLL: указанный модуль не найден
  • Как начать использовать `scipy`
  • Кросс-платформенное пространство, оставшееся на томе с использованием python
  • Python работает под управлением Windows: OSError: Недопустимый дескриптор
  • Не удается установить ggplot с anaconda
  • Windows Scipy Install: не найдено ресурсов Lapack / Blas
  • One Solution collect form web for “Ошибка при развертывании Django на Apache”

    Проблема в том, что вы импортируете свое приложение («основное»), как будто оно живет непосредственно на пути Python, и ваш URLconf («therap.urls»), как будто он живет в модуле «therap» на пути Python. Это может работать только в том случае, если оба метода «D: / therap» и «D: / therap / therap» являются ОБОИХ на пути Python (который запускает для вас автоматически, чтобы «сделать вещи легкими», хотя это заканчивается тем, что просто задерживает путаницу до тех пор, пока время развертывания). Вы можете эмулировать поведение запускающего сервера, используя следующую строку в конфигурации Apache:

     PythonPath "['D:/therap', 'D:/therap/therap'] + sys.path" 

    Вероятно, имеет смысл стандартизировать ваши ссылки, поэтому ваш путь Python должен включать только тот или иной. Обычный способ (по крайней мере, так, как я вижу, ссылается чаще) заключается в том, чтобы поставить «D: \ therap» на путь Python и квалифицировать ваше приложение как «therap.main», а не просто «главное». Лично я придерживаюсь противоположного подхода, и он работает отлично: поставьте «D: \ therap \ therap» на свой путь Python и установите ROOT_URLCONF в «urls» вместо «therap.urls». Преимущество этого заключается в том, что если в будущем вы захотите сделать свое «основное» приложение повторно используемым и вывести его из конкретного проекта, ваши ссылки на него не привязаны к имени проекта «therap» (хотя с приложением под названием « main ", это не похоже на то, что вы все равно думаете о многоразовых приложениях).

    Python - лучший язык программирования в мире.