Поддержка Python на хостинге
Python - динамично развивающийся объектно-ориентированный язык программирования. Применяется для решения самого широкого круга задач: от создания веб-приложений и системных утилит до написания игр. Основной упор в разработке Python сделан на производительность разработчика и читаемость кода.
Как организована поддержка Python на виртуальном хостинге
Непосредственно интерпретатор расположен по адресу:
/usr/local/bin/python
Помимо, собственно, Python на хостинге централизованно установлен один из самых известных и распространенных фреймворков для разработки веб-приложений на Python - Django.
Все стандартные компоненты Python, доступные пользователю, находятся здесь:
/usr/local/lib/python2.7/
в том числе компоненты Django:
/usr/local/lib/python2.7/site-packages/django/bin/
Взаимодействие с веб-сервером Apache организовано через WSGI-интерфейс (Web Server Gateway Interface) с помощью модуля mod_wsgi.
Как подключить и использовать Python и mod_wsgi
Для тарифных планов "Зенон-420", "Зенон-630" и "Зенон-840" Python и mod_wsgi можно подключить в Панели управления -> раздел "Хостинг".
Выберите основную услугу www.domain_name (где domain_name - название домена Вашего основного сервера) -> раздел "Управление хостингом" -> подключаемые модули. (подробнее)
Какие модули для Python уже установлены
На нашем хостинге уже централизованно установлен ряд модулей для Python. Некоторые наиболее популярные из них:
- py-MySQLdb - интерфейс для работы с MySQL;
- py-beautifulsoup - модуль для работы с HTML и XML документами;
- py-docutils - инструменты для ведения работы с документацией;
- py-imaging - библиотека для для обработки изображений;
- py-lxml - Python-интерфейс для библиотек libxml2 и libxslt;
- py-psycopg2 - интерфейс для работы с PostgreSQL;
- py-openid - библиотека для работы скриптов, использующих OpenID.
Как собрать virtualenv на нашем виртуальном хостинге
Общепринятой практикой для формирования окружения любых проектов на Python является использование virtualenv.
Python virtualenv - инструмент, позволяющий создавать изолированные окружения для Python, что с одной стороны позволяет удобно работать с инструментами easy_install и pip, с другой - не зависеть от модулей, централизованно установленных на сервер.
Собирается он в корневой директории следующим образом:
> mkdir -p ~/lib/python > setenv PYTHONPATH $HOME/lib/python > easy_install --install-dir=$HOME/lib/python virtualenv > ~/lib/python/virtualenv ~/env > source ~/env/bin/activate.csh
По умолчанию, virtualenv собирается на python 2.7.
Установка Django на нашем виртуальном хостинге
На нашем хостинге реализована поддержка Django-проектов именно таким образом.
Что касается настройки веб-сервера: здесь следует отметить, что Django на нашем хостинге запускается не через uwsgi, а через модуль Apache mod_wsgi. В этом случае не требуется выделение отдельного TCP порта или unix-сокета.
virtualenv в соответствии с инструкцией приведенной выше, устанавливается в домашний каталог пользователя и в каталоге ~/env собирается окружение.
Для того, что перейти к его использованию следует выполнить команду в shell'е:
source ~/env/bin/activate.csh
После этого можно устанавливать модули с помощью pip, easy_install и т.п. как обычно. Импортируются установленные модули также без дополнительных настроек, главное, чтобы интерпретатор был запущен в virtualenv.
Можно загрузить проект, установить необходимые модули в virtualenv. После этого можно запустить development server на TCP-порте с большим номером командой:
python manage.py runserver 0.0.0.0:43333И проверить, что всё запускается по ссылке: http://home.domain_name.postman.ru:43333 (где domain_name - Ваше доменное имя). После этого нужно будет создать запускающий скрипт django.wsgi и файл .htaccess (они должны лежать в директории ~/domain_name/www/), перенаправляющий на него все запросы, кроме статических файлов (статические файлы проекта можно расположить в каталоге ~/domain_name/www/static).
.htaccess:
Options +ExecCGI
AddHandler wsgi-script .wsgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ django.wsgi/$1 [QSA,L]
запускающий скрипт django.wsgi такого вида:
import sys, os, site
python_home = 'path_to_homedir/env'
activate_this = python_home + '/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
sys.path.insert(0, 'полный путь до проекта')
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "settings"
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Также обратите внимание, что Python должен быть включен в опциях для данной услуги в Панели управления и не забудьте скорректировать пути и адреса (заменить path_to_homedir).