четверг, 14 января 2010 г.

XAMPP + Python + Django

Без сомнения в сети существует множество инструкций по тому как настроить Python для работы с web сервером Apache и как туда прикрутить Django, но я хочу рассказать о несколько ином варианте настройки.

Во первых результат будет так сказать portable, т.е. может работать с любой флэшки.
Во вторых сам Django будет располагаться в рабочей папке самого сайта, основная причина этого, это хостеры, у которых как всегда с установкой новой версии пуговато. А так ты можешь пользоваться теми модулями, которые сам выберешь.

Начнем, пожалуй.

Нам понадобиться сам XAMPP для Windows, новые версии это хорошо, но остановимся на 1.7.1. Конечно же Python, тут уже я буду делать свой выбор исходя из того, что предоставляет мне хостер, а это версия 2.5. Сложим 1 + 1, т.е. Apache, а в данном комплекте это версия 2.2, и Python 2.5 в результате получим, что нам нужен mod_python, который называется mod_python-3.3.1.win32-py2.5-Apache2.2. Ну и конечно же сам Django, на момент написания это была версия 1.1.1.




Постараемся собрать весь комплект устанавливая минимум приложений.
1. Распаковываем сам XAMPP, на пример сразу на флэшку или внешний диск. Результат выглядит так:



2. Распакуем Python не устанавливая его, для этого выполним такую команду:
msiexec /a m:\download\python-2.5.msi /qb TARGETDIR=m:\xampp\python
где m:\download\python-2.5.msi пусть с дистрибутивом, а m:\xampp\python место, куда распаковываем. Результат:



3. Теперь настало время mod_python, но учитывая, что сам питон мы не устанавливали, а просто распаковали, то и этот компонент надо будет ставить так же через распаковку, если закрыть глаза, что это исполняемый файл, то WinRAR его прекрасно открывает как архив.



Тут Нам интересны две вещи, во первых модуль для web сервера Apache, а во вторых модуль для Python.
Ставим модуль для Python. Распаковываем папку mod_python-3.3.1.win32-py2.5-Apache2.2.exe\PLATLIB\mod_python в m:\xampp\python\Lib\site-packages.



Теперь модуль для Apache. Файл mod_python-3.3.1.win32-py2.5-Apache2.2.exe\PLATLIB\mod_python_so.pyd распаковываем в m:\xampp\python и переименовываем его в mod_python.so.



4. Теперь подготовим папку для проекта. В m:\xampp\htdocs создадим django_project.

5. Установим сам Django. Распакуем архив и выполним команду:
m:\xampp\python\python.exe m:\Download\Django-1.1.1\setup.py build
где m:\Download\Django-1.1.1 путь, куда распаковали архив с Django.
По завершению работы скрипта копируем папку m:\Download\Django-1.1.1\build\lib\django в папку с будущим проектом m:\xampp\htdocs\django_project, здесь можно его обновлять, и какая бы версия не стояла у хостера, будем использовать только свою, за одно скопируем все это же в папку m:\xampp\python\Lib\site-packages\django, по идее оно там должно лежать изначально, но понадобиться оно только для всего лишь одной команды создания сайта "Hello world!" с помощью мастера. Скрипт m:\Download\Django-1.1.1\build\scripts-2.5\django-admin.py в папку m:\xampp\python\Scripts, если ее нет, то создайте ее, это и есть тот скрипт, который по быстрому создаст тестовый проект.

6. Настало время настроить web сервер. В файл конфигурации Apache (m:\xampp\apache\conf\httpd.conf) добавляем строчку:
LoadModule python_module "/xampp/python/mod_python.so".
Теперь создадим виртуальный хост для нашего проекта. Предупреждаю сразу, в данной статье не ставится целью рассказать как правильно и красиво надо оформлять виртуальный хост, по этому я просто копирую имеющийся в конфигурационном файле шаблон и слегка его подправляю. Открываем m:\xampp\apache\conf\extra\httpd-vhosts.conf и добавляем:

<virtualhost test.django.localhost:80>
ServerAdmin admin@localhost
DocumentRoot /xampp/htdocs/django_project
ServerName test.django.localhost
ErrorLog logs/test.django.localhost-error_log
CustomLog logs/test.django.localhost-access_log common
</virtualhost>


Теперь нужно убедить наш web браузер, что адрес http://test.django.localhost/ находится на локальной машине, выполняем команду:
notepad %windir%\system32\drivers\etc\hosts
и добавляем строчку:
127.0.0.1 test.django.localhost

7. Создадим тестовый проект на Django. Тут все просто, выполняем команду:
cd m:\xampp\htdocs\django_project\
m:\xampp\python\python.exe m:\xampp\python\Scripts\django-admin.py startproject hello

В папке m:\xampp\htdocs\django_project\ появится папка hello с тестовым проектом.



8. Т.к. большинство настроек в виртуальном хостинге делается с помощью файла .htaccess, все остальное мы в нем и пропишем.

SetHandler python-program
AddHandler mod_python .py
PythonPath "['/xampp/htdocs/django_project'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE hello.settings
PythonDebug On

где '/xampp/htdocs/django_project' путь к проекту, где лежит django + hello,
а в hello.settings, hello это имя сайта.
Сохраняем файл в папку m:\xampp\htdocs\django_project.

9. Что бы Apache знал о том, что где то лежит Python нужно задать переменную PYTHONHOME.
Для этого создадим командный файл xampp.bat с таким содержимым:
set PYTHONHOME=%CD%\python
xampp-control.exe

Переменная %CD% содержит путь рабочей директории, значит запускать этот файл надо из самой папки xampp, при этом запускается панель управления, где можно управлять компонентами XAMPP, но тут есть один не красивый момент, а именно то, что окошко консоли постоянно показывается. Сделаем ему небольшой тюнинг.
Качаем утилиту bat2exe, которая умеет делать исполняемые файлы из командных. Запускаем ее, указываем путь к командному файлу, выбираем пункт "Invisible application", "Current directory", в последней вкладке можно выбрать файл иконки, жмем Compile, получаем из файла xampp.bat файл xampp.exe, который выставляет нужную переменную окружения для питона и запускает панель управления, при этом самого приложения не видно, оно будет запущено до тех пор, пока запущен xampp-control.exe.

10. Запускаем Apache, запускаем браузер, переходим по адресу test.django.localhost, видим:


Данный метод запуска опробован на хостинге SpaceWeb.
Надеюсь это кому то помогло. Возможно "продолжение следует"...

Читать дальше...