Управляем разными версиями python

Python, при всей его стабильности и устоявшемся api, продолжает активно развиваться: новые версии выходят примерно раз в два/два с половиной года. В то же время, в linux-операционных системах обновляются только минорные версии языка (скажем, 3.5.1 до 3.5.2), а новый python 3.6 из коробки можно будет "потрогать" только со следующей версией дистрибутива ОС.

Обновление ОС ради новой версии python - крайняя мера, а в случае серверов - и вовсе сомнительное удовольствие. Вот и выходит, что часто, чтобы попробовать все нововведения приходится использовать docker или устанавливать новую версию вручную. В последнем случае стоит быть очень внимательным, чтобы не заменить системную версию python, иначе можно заработать головную боль из-за проблем с совместимостью. В случае же, если альтернативную версию python необходимо установить на сервере, вариантов становится еще меньше (я обычно в таких случаях оборачиваю приложение в docker-контейнер).

Для решения этой проблемы имеется pyenv: инструмент для управления разными версиями python. С его помощью можно быстро и просто устанавливать, удалять и переключаться между множеством различных версий python, не покидая командной строки. Pyenv - это попытка объединить в одном месте все лучшее в python-мире: pip, virtualenv и pipfile. В месте с тем, это простой инструмент, который следует UNIX-традициям: делай одну вещь, но делай её хорошо.

pyenv позволяет:

  • изменять глобальную версию python, используемую по-умолчанию, для определенного пользователя;
  • выбирать определенную версию python для отдельных проектов;
  • переопределять версию python при помощи переменной окружения;
  • выполнять одни и те же команды с использованием нескольких разных версий python, удобно для проверки совместимости.

Read more...

Становимся опытным пользователем pdb

Что такое pdb?

pdb - модуль из стандартной библиотеки python, который позволяет:

  • пошагово выполнять инструкции из исходного кода
  • устанавливать условные точки останова (breakpoints)
  • исследовать стек вызовов (трассировка стеков, stack trace)
  • просматривать исходный код
  • исполнять python-код в контексте выполняемой программы
  • выполнять исследование аварийно завершившейся программы (постотладка)

Read more...

Регистрация пакета на PyPi

Для того, чтобы python-проект можно было устанавливать при помощи pip и распространять через хранилище пакетов pypi, он должен иметь определенную структуру и содержать ключевые для установки файлы.

Классическим считается следующее расположение файлов:

root-dir/   # рабочая папка с проектом
      setup.py
      setup.cfg
      LICENSE.txt
      README.md
      mypackage/
        __init__.py
        foo.py
        bar.py
        baz.py

Read more...

Создание docker-окружения для Django проекта

Docker представляет собой открытую платформу для разработчиков и системных администраторов, которая позволяет запускать приложеня в отдельных изолированных контейнерах, значительно упрощая процесс разработки. Если вы не в курсе, что это такое и с чем его едят - то, пожалуй, вам сначала стоит немного погуглить на эту тему, а потом возвращаться сюда.

О преимуществах и недостатках такого подхода к разработке и развертыванию уже написано много статей, не вижу смысла повторяться. Сосредоточимся сразу на основной теме статьи: создание docker-окружения для разработки и запуска web-проекта, написанного на python. В качестве примера буду использовать мой последний проект на Django, но все написанное ниже на 95% подойдет к любому другому web-фреймворку на python, будь то Twisted, Flask или что-либо еще.

Read more...

Supervisord: перезапуск и перезагрузка (обновление настроек)

Supervisord - отличный сервис для управления процессами приложений. Однако, у него нет возможности перегружать настройки, а перезапуск работает совсем не так, как мы привыкли. Рассмотрим доступные команды и результат их выполнения.

Read more...

Makefile в python-проектах

Обычно makefile используются при написании программ на C, для автоматизации операций, которые необходимо выполнить перед компиляцией кода. В этих файлах описываются правила (шаги), которые необходимо выполнить, чтобы скомпилировать программу. Самый простой makefile для C-программы выглядит так:

helloword: helloword.c
    gcc -o hellword hellword.c -I.

После этого, выполнив из командной строки

$ make helloword

можно запустить компиляцию C-кода при помощи gcc.

Возникает справедливый вопрос: как все это связано с python-ом? Ведь это интерпретируемый язык программирования, а прекомпиляция происходит невидимо для пользователя в момент первого запуска программы, так что использование makefile кажется бессмысленным. Однако и тут makefile может облегчить жизнь и упростить выполнение рутинных операций.

Read more...

Управление контейнерами для разработки при помощи Docker Compose

Концепция микросервисов постепенно изменяет индустрию информационных технологий. Огромные монолитные системы постепенно уступают место небольшим и автономным микросервисам, работающим вместе. Этот процесс сопровождается еще одним трендом: контейнеризацией. В комплексе, эти два понятия позволяют создовать системы с беспрецендентной устойчивостью.

Контейнеризация меняет не только архитектуру сервисов, но и структуру окружений, в которых они создаются. Теперь, когда программное обеспечение можно распространять в контейнерах, разработчики имеют полную свободу выбора приложений и инструментов. В результате - даже сложные системы, вроде серверов с базами данных и аналитической инфраструктурой могут быть запущены в течении секунд. Разработка программного обеспечения становится более простой и эффективной.

Read more...

Python 3 - Введение в asyncio

Модуль asyncio был добавлен в основную библиотеку python в версии 3.4 в качестве временного пакета. Это означает, что в ходе обновлений модуль может получить изменения, несвместимые с предыдущими версиями, или, возможно, вообще будет удален из базовой библиотеки. Из документации следует, что asyncio "предоставляет инфраструктуру для написания однопоточного конкурентного кода при помощи сопрограмм (corutines), мультиплексирования ввода/вывода данных через сокеты и другие ресурсы, запуска сетевых клиентов и серверов, и другие подобные примитивы". Эта статья не ставит цели описать всё, что можно сделать при помощи asyncio, однако из неё можно понять, как использовать этот модуль и чем он может быть полезен.

Если вам нужен пакет с функционалом asyncio в более старых версиях python, обратите внимание на Twisted или gevent.

Read more...

Освобождаем место на диске после docker

Я большой фанат docker. Уже более чем 2 года я уверен в том, что этота технология изменит способ развертывания приложений. Не только web-приложений, но и инструментов командной строки, а, возможно, и графических приложений. Но такая точка зрения не отменяет кучи недостатков, с которыми я периодически сталкиваюсь.

Один из основных неприятных моментов, с которыми мне приходится постоянно сталкиваться, - это загромождение свободного места на диске. До недавнего времени я постоянно сталкивался с проблемами настройки окружений, потому что мне постоянно не хватало места на жестком диске, и я не мог понять, куда оно девается. Ниже я приведу несколько советов, как избежать хранения неиспользуемых docker-образов и предотвратить их появление.

Read more...

Руководство по псевдоклассам и псеводэелментам в css

Предлагаю вашему вниманию достаточно простое и непринужденное CSS-руководство по псевдоклассам и псевдоэлементам. Если вы являетесь опытным веб-дизайнером или разработчиком, то, должно быть, вы уже знаете и использовали большинство псевдоклассов и псевдоэлеменов рассматриваемых в этой статье. Однако, предлагаю вам все же ознакомиться с содержимым, возможно один-два примера окажутся для вас новыми.

Перед тем, как погружаться в дебри css, давайте разберемся, что же означает слово "псевдо"? Из определений на gufo.me можно узнать:

Псевдо — Префикс, означающий ложный, фальсифицированный, поддельный. Подразумевается, что "псевдо" событие или объект является копией реального события или объекта. 

Read more...