Windows, Vagrant, Virtualenv — Protocol error

При попытке инициализировать виртуальное окружение в расшареной папке Вагранта под Виндоус получаю ошибку OSError: [Errno 71] Protocol error.

Лечится вызовом виртуаленв с опцией —always-copy.

virtualenv -p python3 env --always-copy

Vim: совместное использование YouCompleteMe и Virtualenv

Способ 1

Запускать Vim из терминала с уже активированным окружением Virtualenv.

Способ 2

В Vim после активации виртуального окружения с помощью vim-virtualenv:

:VirtualEnvActivate myenv

перезапустить серверную часть YouCompleteMe:

:YcmRestartServer

Проблемы при деплое Django на виртуальный хостинг на примере jino.ru

Деплой Django на виртуальный хостинг для меня частенько превращается в квест. Это происходит из-за большого количества зависимостей Django от программного системного окружения. Но беда даже не в их количестве, а в том, что существует несколько способов их разрешения. Это красота и боль UNIX-way, воплощенная в python.

Одним из инструментов, призванных облегчить работу в этом хаосе, является виртуальное Python-окружение virtualenv. Да, использование virtualenv безусловно полезная практика, но virtualenv не решает всех проблем. Некоторые python-модули написаны на C и требуют компиляции при установке, а также имеют зависимости от -dev версий системных библиотек. Такие зависимости невозможно разрешить самостоятельно, имея лишь права пользователя виртуального хостинга. Админы же хостинга не всегда считают нужным об этом позаботиться, а времени на переписку с саппортом частенько нет. Один из таких хостингов jino.ru.

Яркий пример таких «проблемных» пакетов жизненно необходимые в большинстве Django проектов mysql-python (MySQLdb) и PIL. Проблему можно попробовать решить, используя ключ —system-site-packages при создании виртуального окружения. И тогда, если тебе немного повезет, в системе уже будут установлены эти пакеты не очень древних версий. Обрати внимание, что поведение по умолчанию в отношении установки системных пакетов у virtualenv менялось с течением времени. Поэтому либо качай и используй свежую версию virtualenv, либо предварительно сверься с документацией к используемой версии.

В моем случае ситуацию дополнительно усложняло то, что я использую более свежий форк PIL-а Pillow, так как PIL уже много лет как заброшен своими мейнтейнерами и не умеет работать с новыми форматами изображений. А Pillow для обратной совместимости маскируется под PIL и импортируется в скрипты под его псевдонимом, что избавляет от правки исходников своих и сторонних пакетов. Таким образом, при наличии PIL в окружении (один из системных пакетов), становится невозможной работа с Pillow.

В случае с Джино, я попал в следующую ситуацию: с одной стороны мне нужны системные пакеты в virtualenv из-за MySQLdb, а с другой нет — из-за PIL. Возможности выборочной установки или деинсталяции системных пакетов в virtualenv на данный момент нет. Проблему решил хладнокровным удалением PIL из myenv/lib/pythonx.x/site-packages.

Web Development with Python and Django

ОтКройТе ГлаЗА!
Вчера утром после деплоя, я посмотрел на этот мир по другому. Почему вы так живете? Почему вы не можете открыть глаза? Мне не нравится что в этом городе нет солнца, что везде заводы и трубы, что холодно и деревья без листьев. Метро – Муравейник роботов. Кто – то из вас тоже робот который боится выйти за границу своего тела, подняться выше метро и заводов. А кто – то меня поймет. Мы другие. Мы выше и мудрее вас. И нас больше чем вы думаете. Я не говорю про Lisp, его я боюсь. Я говорю про Python. Сегодня я уже радовался всем мелочам. Обращая внимание на мелочи рождается совершенство, а совершенство это не мелочи!!! И только Django дало мне это понять. Разве это плохо? Разве плохо быть другим?

Развертывание Django проекта на виртуальном хостинге

Недавно перенес оба-два свои блога на WordPress с Петерхоста на Locum. Пока полет нормальный — Locum дешевле, удобней и стабильнее. Также я рекомендовал этот хостинг заказчику для размещения небольшого Django сайта, который я сейчас разрабатываю. О том, как развернуть Django 1.4 проект на виртуальном хостинге Locum.ru, и пойдет речь в этом посте.

Итак, в панели управления создаем новый проект, например, mysite.

Заходим на сервер по SSH и скачиваем последний virtualenv:


wget https://raw.github.com/pypa/virtualenv/master/virtualenv.py

Создаем виртуальное Python окружение:


python virtualenv.py ~/env/mysite

Флаг --no-site-packages указывать не нужно — теперь это поведение по умолчанию.

Активируем окружение:


source ~/env/mysite/bin/activate

На локальной машине создаем и редактируем файл зависимостей проекта:


pip freeze > req.txt

Заливаем файл на сервер и устанавливаем все необходимые пакеты:


pip install -r req.txt

С подготовкой окружения закончили, переходим непосредственно к работе с проектом. Все проекты находятся в директории ~/projects, в том числе и наш mysite. Locum создает дефолтный проект автоматом, он не нужен — чистим директории apps, media и static. Заливаем проект и дамп базы. Удаляем wsgi.py файл, использовавшийся на локальной машине, правим файл setting.py. Правим django.wsgi файл, созданный хостингом:


#!/usr/bin/python
# -*- coding: utf-8 -*-
activate_this = '/home/hosting_login/env/mysite/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
import os
import sys

sys.path.insert(0, '/home/hosting_login/env/mysite/lib/python2.6/site-packages')

sys.path.insert(0, '/home/hosting_login/projects/mysite/apps')

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Собираем статику:


python manage.py collectstatic

Перезапускаем приложение кнопкой в панели хостинга или изменением времени редактирования файла django.wsgi


touch django.wsgi