В unix-системе питоновские пакеты совсем не обязательно нужно ставить в системные каталоги (в /usr/, например). Благодаря virtualenv, пакеты можно установить в любой каталог, инициализировать локально окружение в терминале через специальный скрипт и дальше пользоваться всеми установленными в том каталоге библиотеками и программами. Локальный набор пакетов очень удобен для разработчика, так как позволяет на одной системе переключаться между разными их версиями.
В статье я описываю не только концепт, но и всю процедуру подготовки локального окружения. Сразу же уточнение: всё работает только в терминале, то есть вы запускаете терминал, «активируете» в нём нужный каталог с пакетами и дальше в этом терминале работаете. Базовая операционная система — linux, *bsd или mac os x. Windows я не рассматриваю.
Итак, нам понадобится установленный системно python3. Для линукса он ставится из пакетов вашего репозитория, для макоси — скачивается с офсайта https://www.python.org/downloads/mac-osx/. На данный момент последняя версия — 3.5.2, её и ставим. В принципе, версия из brew тоже сойдёт.
В питоне есть модуль logging, через который приложение может выводить логи, например, в терминал при отладке программы. По умолчанию вывод выглядит просто как сплошной поток текста, однако его можно раскрасить, чтобы разные типы сообщений (DEBUG, INFO и т.п.) печатались разными цветами. Для этого нужно сконфигурировать форматер логов и протащить его в программу, сделать это можно разными способами в ini-файле проекта или внутри самой программы.
В сети много рецептов форматеров, однако можно просто поставить готовый модуль, например, colorlog
. Ниже я расскажу о разных способах его подключения к проекту и конфигурации.
Задача: есть PDF, в котором очень широкие поля, плюс куча мусора на них типа «Украдено в Хилтоне», поэтому нужно поля по максимум отрезать. Можно, конечно, рыть интернеты в поисках подходящей программы, но за короткий срок этого сделать не удалось.
Всё решилось совершенно неожиданным путём: ставим пакет python-pypdf
, пишем простейший питоновский скрипт и получаем ровно что нужно.
Печатаем, что играет амарок. Скрипт очень простой (считаем, что локаль процесса, откуда вызывается скрипт, юникодная):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/usr/bin/env python2.5 # -*- coding: utf-8 -*- import dbus bus = dbus.SessionBus() proxy = bus.get_object('org.kde.amarok', '/Player') player = dbus.Interface(proxy, "org.freedesktop.MediaPlayer") metadata = player.GetMetadata() # access metadata using operator []: np = u"/me now listening to %(artist)s — %(t)s (album: %(album)s)" % { 't': metadata['title'], 'artist': metadata['artist'], 'album': metadata['album'] } print np.encode("utf-8") |
Решил написать какую-нибудь простую систему для генерации FictionBook2-файлов, разметка — нечто wiki/markdown/reStructuredText/Sphinx-подобное, плюс файл с метаданными в виде простого .ini-подобного файла.
За несколько часов настрогал, потом пару дней отлаживал. Оказалось вполне пригодно для использования. Создание/обновление книг значительно ускорилось. Уже несколько книг обработал, в частности, вот этот сборник сказок братьев Гримм.
Никакой документации, кроме демонстрационного проекта, пока нет.
Сайт проекта: metafb2.googlecode.com