среда, 18 мая 2011 г.

Django, Python и Virtualenv на хостинге

Представим такую ситуацию. Имеется хостинг с поддержкой Python/Django, но в имеющемся пайтоне нет нужных модулей, а версия Django не достаточно свежая. В таком случае можно установить свою версию Python в свой домашний каталог с помощью Virtualenv и в него уже устанавливать Django и все необходимые модули. Показывать буду на примере хостинга locum.ru (отличный хостинг, кстати).

В первую очередь надо установить virtualenv. Скачать ее можно отсюда http://pypi.python.org/pypi/virtualenv . Скачанный архив распаковываем, переходим в него и делаем $ python virtualenv.py ~/myenv . В результате создастся каталог ~/myenv, в который и будут устанавливаться модули пайтона и Django.

Для активации virtualenv нужно выполнить следующую команду: $ source ~/myenv/bin/activate . Добавьте эту команду в ~/.bashrc. Теперь команда $ which python должна вывести что-то похожее на "/home/accountname/myenv/bin/python". Если все так, то можете скачивать и устанавливать модули и все необходимое (модули будут установлены в каталог ~/myenv/lib/python-2.6/site-packages/).

Проверить версию свежеустановленного Django можно так:

 $ python
Python 2.6.6 (r266:84292, Oct  9 2010, 12:24:52)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.get_version()
'1.3'
>>>



В своем аккаунте на locum.ru создаете новый проект (назовем его test1), в каталоге ~/projects создастся каталог test1 с пустым джанго-проектом. Этот каталог можно сразу удалить и командой django-admin startproject test1 создать новый. Теперь, чтобы все заработало, в каталоге с новым проектом надо создать файл django.wsgi с таким содержанием:
#!/home/имя-аккаунта/myenv/bin/python
# -*- coding: utf-8 -*-
activate_this = '/home/имя-аккаунта/myenv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
import os
import sys
sys.path.insert(0, os.path.dirname(__file__))
sys.path.insert(0, '/home/имя-аккаунта/myenv/lib/python2.6/site-packages/django')
sys.path.insert(0, '/home/имя-аккаунта/projects/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'test1.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

2 комментария:

  1. Спасибо за совет. Вроде помогает. Алсо, хороший хостинг это Webfaction. А Локум это костыли. Даже спусти 2 года после этого поста.

    ОтветитьУдалить