Техническая поддержка

Поддержка 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- Ваше доменное имя). После этого нужно будет создать запускающий скрипт и файл .htaccess, перенаправляющий на него все запросы, кроме статических файлов (статические файлы проекта можно расположить в каталоге ~/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

# Здесь загружается virtualenv
site.addsitedir('path_to_homedir/domain_name/env/lib/python2.7/site-packages')
activate_env=os.path.expanduser("path_to_homedir/domain_name/env/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))

# Здесь загружается сам проект
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 и domain_name).