четверг, 29 ноября 2012 г.

pisa / xhtml2pdf, конвертер, написанный на Python (Перевод)



Какое-то время назад я познакомился с pisa, которая теперь называется xhtml2pdf. Она написана на Python и может быть использована для конвертации HTML/CSS в PDF.

Вот список некоторых возможностей xhtml2pdf:
  • Переводит HTML и CSS в PDF файлы
  • Написан только на Python и потому платформо-независим
  • Поддерживает колонки, заголовки, колонтитулы, номера страниц, пользовательские шрифты Postscript иTrueType и многое другое
  • Поддерживает фреймворки типа Django, Turbogears, CherryPy, Pylons, WSGI
  • Простая интеграция в программы на Python
  • Может быть использована как утилита командной строки для Windows, MacOS X and Linux (бинарники отсутствуют)
Выглядит, в общем, полезной штукой.

xhtml2pdf: конвертер HTML/CSS в PDF на Python

Согласно сайту, xhtml2pdf бесплатен для коммерческого и некоммерческого использования.

Источник

PyBooklet: создание PDF с двумя страницами на листе для печати (Перевод)


Интересная идея.
PyBooklet может быть полезным дополнением к моей утилите PDFBook (части xtopdf), которое может создавать книжки в PDF из набора текстовых файлов, используя при этом меньшее количество бумаги, что хорошо отразится на окружающей среде.

среда, 21 ноября 2012 г.

wxPython in Action. Часть 3. Продвинутое использование wxPython (Перевод)

Эту часть мы начнём с рассмотрения трёх более сложных виджетов и перейдём к возможностям, которые не будут использованы в каждой программе на wxPython, но тем не менее лучше быть с ними знакомым, чтобы использовать их когда это вдруг понадобится.
В главе 13, "Создание списков (list control) и управление им" мы рассмотрим списки, более продвинутую версию list box, который позволяет отображать элементы в стиле проводника windows с различными режимами. Вы узнаете как переключаться между этими режимами, добавлять в список текст и изображения, и реагировать на действия пользователей. Глава 14, "Работа с сеткой (grid control)", добавляет ещё одно измерение к списку. Сетки очень гибкие и мы покажем Вам способы работы с данными в сетке, так же как и механизмы настройки отображения сетки и её редактирования. Глава 15, "Взбираясь на дерево (tree control)", мы поговорим об элементе "дерево", который позволяет компактно отображать иерархию объектов. Мы узнаем как работать с данными в этом элементе, перемещаться по дереву и настраивать его отображение.
В главе 16, "Включение HTML в ваше приложение", мы увидим, что HTML - удобный способ настройки стилей отображения текстовых меток и вывода чего-либо на печать. Мы покажем как работает виджет HTML и какие ограничения он содержит относительно стандарта HTML. Глава 17, "Фреймворк для печати в wxPython", разбирается с проблемами вывода на печать, как рисовать в принтер и как работать со стандартным диалогом печати, чтобы обеспечить взаимодействие между wxPython и системой печати ОС. Кроме того, мы увидим как сделать предпросмотр перед печатью. Глава 18, "Использование оставшихся возможностей wxPython", расскажет обо всём остальном. Там мы поговорим о передаче данных через буфер обмена, работе в drag and drop, использовании таймеров и сделаем несколько замечаний об использовании потоков в приложениях wxPython.

понедельник, 19 ноября 2012 г.

Обзор книги: Steve Holden: Python для анализа данных (Перевод)


Python for Data Analysis; Wes McKinney. O'Reilly Media, October 2012
Эта книга является давно ожидаемым дополнением к священному писанию Python, и её стоит прочитать каждому, кто связан с анализом данных. C самой первой главы это чёткое и и качественное объяснение того, как можно использовать Python для этих целей. Автор подразумевает, что Python используется в качестве "готового" языка, так что в книжке не рассказывается о том, как реализовать аналитические методы на Python, вместо этого на практических примерах демонстрируется как использовать уже существующие, доступные, мощные инструменты.
После нескольких коротких мотивирующих примеров Вы прочитаете одно из наиболее ясных изложений преимуществ iPython, которое я только читал. Прочитав эту главу я не только убедился в этих преимуществах, но и завёл себе аккаунт на NotebookCloud*, который, мне кажется, поможет мне в моей преподавательской деятельности.
Следующая глава объясняет основы Numpy, затем идёт введение в библиотеку pandas. После чего идёт углубление в тему, сопровождаемое обильными примерами: очистка данных, различные важные изменения, создание графиков и визуализации, агрегация данных и группировка, временные ряды и финансовые приложения.
Последняя глава углубляет наши познания в Numpy и позволяет нам заглянуть под капот, чтобы помочь нам выжать максимум из этого пакета и понять, как лучше использовать доступные возможности. Приложение “Python Language Essentials” - хорошее введение в язык, что даст даже неопытным пользователям Python понять все приводимые примеры.
Книжка написана ясно, с большим количеством примеров и обсуждений. Для тех, кто хочет посмотреть на код - кода тут достаточно. Почти на каждой странице есть код на Python (а там, где его нет - скорее всего приводится результат выполнения кода с предыдущей страницы).
Wes McKinney принял решение сосредоточиться на Python 2.7, который используется большей частью научного и аналитического сообщества. Качественные текст и последние новости (что matplotlib** уже портирован на Python 3) облегчит переход на Python 3 в ближайшем будущем.
Если Вы хотите понять, как использовать Python в качестве аналитического инструмента - я крайне рекомендую эту книгу.

* Amazon Web Services account требуется для использования этого сервиса и он же будет использован для оплаты ваших вычислений
** То есть "Scientific tool chain" теперь доступен для Python 3

вторник, 13 ноября 2012 г.

Релиз: "Menno's Musings": IMAPClient 0.9.1 (Перевод)


Вышел IMAPClient 0.9.1! В этом релизе:
  • Поддержка OAUTH2: OAUTH v1 всё ещё поддерживается Gmail но уже не рекомендуется. Поэтому особая благодарность Zac Witte за реализацию поддержки версии 2.
  • Поддержка потоков: теперь возможно запустить IMAPClient как внешнюю команду для работы с IMAP сервером. Это полезно для экзотических соединений или настроек аутентификации. За это надо благодарить Dave Eckhardt.
  • обновлен livetest для работы с тем, как Gmail теперь обрабатывает новые сообщения.
Смотрите файл NEWS и руководство в поисках больших подробностей.
Как и раньше, IMAPClient может быть установлен из PyPI (pip install imapclient) или загружен с сайта IMAPClient..

понедельник, 12 ноября 2012 г.

Документация South - Перевод. Часть 3: Дополнительные команды и миграция данных

Последовательная работа с миграцией

Иногда Вы можете обнаружить, что изменения в модели требуют некоторых улучшений. Предположим, Вы определили модель:

 class Group(models.Model):
     name = models.TextField(verbose_name="Name")
     facebook_page__id = models.CharField(max_length=255)


и вы создали и применили миграцию:

 ./manage.py schemamigration southtut --auto
 ./manage.py migrate southtut

вторник, 6 ноября 2012 г.

Документация South - Перевод. Часть 2. Более сложные изменения схемы

Теперь, когда мы знаем как обслуживать простые изменения модели, давайте посмотрим на более сложные случаи, которые Вы так же можете обработать при помощи South.

Значение по умолчанию

Во-первых, давайте займёмся более хитрыми типами колонок. В прошлой части мы добавили BooleanField в таблицу - такую операцию БД легко обработать, так как у него есть значение по умолчанию (False). Это значение и будет установлено для всех уже имеющихся записей в БД.
Однако для некоторых колонок нет предопределённого значения по умолчанию. Если в колонке может присутствовать значение null, то есть null = True, тогда уже существующие записи получат значение null. В противном же случае, если колонка NOT NULL (null = False, свойство колонки по умолчанию), то в таком случае нет значения, которое БД могла бы присвоить уже имеющимся записям, так что Вы не сможете просто добавить колонку (однако, некоторые БД могут позволить Вам добавить колонку в пустую таблицу).
Если South обнаружит такую ситуацию, он тут же спросит у Вас что делать. Давайте посмотрим на это.

воскресенье, 4 ноября 2012 г.

Документация South - Перевод. Часть 1: Основы

Добро пожаловать в руководство. Тут мы постараемся рассказать об основах использования South и дать несколько общих советов как ещё его можно использовать.
Если Вы никогда не слышали о библиотеках для миграции, тогда сперва прочитайте раздел "что такое миграция". Это поможет Вам лучше понять для чего предназначены South и его альтернативы, такие как django-evolution.
В этом руководстве мы предполагаем, что South у Вас уже установлен и настроен, иначе смотрите раздел "установка".

Приступаем

В этом руководстве мы рассмотрим процесс миграции на новое приложение. Вопросы изменения схемы существующего приложения мы рассмотрим позже.

суббота, 3 ноября 2012 г.

Как создать генератор номера счёта? (Перевод)

Требования к генератору:
  1. Выдача псевдо-случайных последовательных номеров (уникальных для десятков миллионов записей)
  2. Простая проверка корректности (без обращения к БД)
Мы будем использовать сеть Фейстеля для создания псевдо-случайных чисел (только положительных) из последовательных чисел (т.е. возвращаемых при помощи nextval() для posgresql sequence). Этот алгоритм принимает базис для функции `make_feistel_number`, доступной в пакете wheezy.core.

Передача аргументов с неверным идентификатором (Перевод)


Я получил запрос на улучшение для hgapi, указывающий, что не возможно фильтровать логи Mercurial используя API, так как специального метода для этого нет, а запасной способ - указание именованных аргументов для дальнейшей передачи их в командную строку - не работает. Сам метод такой:
def hg_log(self, identifier=None, limit=None,
           template=None, branch=None, **kwargs):
где kwargs принимает ключи для передачи их командной строке. Таким образом, если мы хотим получить лог для ветки, то использование вызова
repo.hg_log(-b=mybranch)
должно бы сработать, пока Вы не заметите, что  '-b' некорректный идентификатор, так что код просто не будет работать. Но ведь почти все опции для работы с Mercurial, которые Вы можете захотеть передать, начинаются с -, так какой тогда смысл использовать kwargs вообще?
Примечание: То, что приведено дальше - плохой подход к коду!
И всё же возможно передать аргументы в функцию при помощи некорректного идентификатор, используя распаковку аргументов. Если взять функцию:
>>> def myfunc(positional, kwarg='Hello', **kwargs):
>>>     print(positional)
>>>     print(kwarg)
>>>     for key in kwargs:
>>>         print("%s: %s" % (key, kwargs[key]))
Вы можете передать любой словарь типа:
>>> myfunc(1, **{'-1-': 'dash-one-dash'})
1
Hello
-1-: dash-one-dash
Это, конечно, кривоватый способ, но он может быть полезен, например, в качестве запасного метода для поддержки аргументов, которые могут появиться в будущем, непонятных аргументов и вообще всего, что угодно.
(hgapi 1.3.1a3 был только что загружен на cheeseshop; hg_log теперь принимает аргумент 'branch')

Источник

Обновление статуса Py3k №7 (Перевод)


Это уже седьмое обновление статуса работы над py3k branch, что стало возможным благодаря людям, пожертвовавшим на развитие py3k.
Главная новость на данный момент в том, что Philip начал работать над py3k параллельно с Antonio. Соответственно, резко возросло количество проделанной работы.
Бот сборки теперь каждую ночь собирает новую версию и запускает тесты стандартной библиотеки Python. На данный момент мы проходим 160 тестов приблизительно 355 модулей CPython, проваливает 144 и пропускает около 51.

Релиз Pillow 1-7-8 (Перевод)


Pillow - "дружественный" форк PIL. Сперва это был лишь форк пакета, теперь он содержит исправления ошибок кода для изображений и поддержку Python 3. Чтобы сделать его дружелюбным мы отслеживаем все пожелания к PIL.

четверг, 1 ноября 2012 г.

Документация South - Перевод. Установка

Текущий релиз South - 0.7.6. Но документация написана для 0.7.5, так что имейте это ввиду.
Есть несколько способов установить South:

  • Используя easy_install или pip, что рекомендуется, если Вы хотите получить стабильный релиз
  • Используя Mercurial, что рекомендуется если Вы хотите получить самый последний релиз
  • Скачав архив, если у Вас нет ни easy_install, ни Mercurial
Некоторые дистрибутивы Linux (и UNIX, например, FreeBSD - прим. переводчика) уже содержат South в их репозитории, например, если Вы используете не стабильный Debian, то Вы можете использовать команду apt-get install python-django-south, а на Fedora - yum install Django-south. Обратите внимание, что таким образом Вы можете получить старую версию, так что проверьте сначала номер версии в репозитории.
South <=0.7.3 должен работать с версиями Django от 0.97-pre до 1.1
South >=0.7.4 должен работать с версиями Django начиная от версии 1.2
Пожалуйста, проверьте совместимость с вашей версией в заметках о релизе, чтобы быть в курсе последних изменений.

Документация South - Перевод. Что такое миграция?

Для непосвящённых: миграция (migrations), так же известная как 'schema evolution' или 'mutations' - это способ изменения схемы вашей БД с одной версии на другую. Django сам по себе может лишь добавлять новые модели, но почти во всех проектах часто происходят изменения самой модели - добавляются поля, изменятся свойства полей, и т.д.
South, и другие аналогичные решения, предоставляет способ обойти эту проблему, давая Вам инструмент для лёгкого и предсказуемого изменения схемы вашей БД. Вы пишете миграцию, которая говорит South как перейти с одной версии на другую, и, связывая эти миграции в цепочку, Вы можете двигаться вперёд или назад по истории изменений схемы вашей БД. 
В South, миграция это так же способ создания БД - первая миграция на самом деле миграция из пустой схемы к вашей схеме. Таким образом Вы можете как воссоздать самую последнюю версию схемы БД, так и проапгрейдить любую из устаревших, просто запустив миграцию с определённой точки. 
В процессе этого руководства мы покажем Вам как миграция работает и как она может быть полезна на разных примерах.


Документация South - Перевод. Про South



South привносит миграцию в приложения на Django. Его главная цель - предоставить простой, стабильный и независящий от БД слой миграции чтобы избавить Вас от хлопот по обслуживанию изменений схемы БД в ваших приложениях.

среда, 31 октября 2012 г.

Быстрая авторизация на pyramid при помощи persona (Перевод)


Несколько дней назад, когда вышла первая бета persona, я подумал, что было бы неплохо использовать этот механизм аутентификации для моего следующего проекта. По поводу pyramid документация persona отсылает к записи в блоге под названием: Painless Authentication with Pyramid and BrowserID, которая описывает как использовать pyramid_whoauth с repoze.who.plugins.browserid для использования persona в pyramid.
К сожалению, этот метод всего лишь предоставляет 403-ю страницу с кнопкой входа и нет никакого очевидного способа разместить эту кнопку где-то ещё. Быстрый взгляд на исходники показывает, что сделать это не так уж и просто, так как большая часть работы выполняется в пределах wsgi приложения. Чтобы получить кнопку для входа мне бы пришлось переписать javascript, который взаимодействует с persona api, и, возможно, большую часть кода для входа для сохранения csrf верификации.
Так что вместо того, чтобы переписывать половину и пытаться работать с существующей реализацией, я решил написать код с нуля и, как мне кажется, неплохо было бы сделать это в виде библиотеки. Я назвал его pyramid_persona и он доступен на pypi. README объясняет как его использовать, но тут я хотел бы привести более наглядную демонстрацию.

вторник, 30 октября 2012 г.

Используем Python для редактирования ярлыков (Перевод)


Некоторое время назад я писал о том, как можно создавать ярлыки для программ в Windows. Это всё хорошо, но иногда нам приходится обновлять программы, что может быть связано с изменением пути к программе, а в таком случае надо и поменять к ней ярлык. К сожалению, многие пользователи часто меняют имя ярлыка, так что найти его становится тяжело. Однако, как всегда Python облегчает эту задачу и я покажу как.

Создать ярлык - the hard way (Перевод)

Маленькое объяснение: ярлыки хранятся как файлы .lnk, но представлены они внутри шелла как объекты IShellLink, чья реализация IPersistFile используется для хранения ярлыка. Поэтому, чтобы создать ярлык Вы сперва создаёте объект IShellLink, используете методы интерфейса IShellLink для заполнения деталей, а затем вызываете метод IPersistFile.Save для создания ярлыка на диске.

Создаём ярлыки при помощи Python (Перевод)


На работе часто приходится заниматься системным администрированием и для этого я использую скрипты на Python. Например, почти все скрипты входа в систему написаны на Python (некоторые из них портированы с Kixtart). В течении этого года мне пришлось заниматься созданием ярлыков для новых приложений, которые должны быть расположены на рабочем столе, в меню "все программы" или и там и там. В этой статье я расскажу о том, как решить эту проблему.
Обратите внимание, эта статья касается только Windows!!!

stevedore 0.6 (Перевод)


Что такое stevedore?


Python облегчает динамическую загрузку кода, позволяя Вам настраивать и расширять ваши приложения отыскивая и загружая расширения (плагины). Многие приложения реализуют для этого свои собственные библиотеки, используя __import__ или importlibstevedore позволяет Вам обойтись без этого создавая setuptools entry points. Код управления этой точкой обычно повторяется, так что stevedore предоставляет классы для управления этими шаблонами.

Что нового?

  • Добавлен TestExtensionManager для написания тестов для классов, которые используют менеджер расширений
  • Изменён EnabledExtensionManager для загрузки расширений до вызова проверяющей функции, так что можно проверить может ли быть плагин доступен.
Установки

Посетите страницу проекта stevedore для ссылки загрузки и инструкций по установке.


Источник

понедельник, 29 октября 2012 г.

Python сообщество и конференции

Уважаемые читатели, а кто-нибудь в курсе, есть вообще живая юзер-группа Python в России? Проводятся ли конференции? Интересно было бы сделать?

Создаём QR коды на Python (Перевод)


Как-то раз я задумался: было бы забавно создать программу при помощи wxPython, которая генерирует QR коды и затем отображает их на экране. Поскольку, как понятно, я хотел написать её на Python, то после недолгих поисков я обнаружил трёх кандидатов на это дело:
Я воспользовался python-qrcode и pyqrnative, так как они прекрасно работают как на Windows, так и на Mac и Linux. Кроме того, они не требуют ничего больше, только Python Imaging Library. Проект pyqrcode требует дополнительных модулей и не работает на Windows, так что я даже не стал с ним заморачиваться. В итоге я взял старый код моего  Photo Viewer и немного его переиначил, чтобы получить генератор QR кодов. Если интересно - давайте поподробнее!

Релиз Demakein 0.2: Шалмей (Перевод)


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

воскресенье, 28 октября 2012 г.

Программирование работы с SSH при помощи Paramiko (Перевод)


OpenSSH - это вездесущий метод удалённого безопасного доступа к машине и передачи файлов. Многие - системные администраторы, инженеры автоматизации тестов, веб-разработчики и другие люди используют этот методы ежедневно. Написание скриптов для ssh на Python может быть тяжёлым занятием, но модуль Paramiko позволяет решить эту задачу проще.
Это репринт статьи, написанной для Python Mag­a­zine в колонку Com­pletely Dif­fer­ent и опубликованной в октябрьском выпуске 2008 года. Тут она приводится в оригинальной форме, со всеми ошибками и т.д.

Тяжёлый свинец (Перевод)


Забавно, как иногда идёт наша жизнь. Я не работал с Plumbum практически с их майского релиза, и вдруг такие быстрые изменения. Версия 1.0 вышла не так давно, в этом месяце, за ней последовала версия 1.0.1, куда была добавлена поддержка PuTTY на Windows и исправлены некоторые ошибка, и вот теперь я счастлив представить версию 1.1, которая уже почти на носу (запланирована в середине ноября). В этом релизе будет добавлена поддержка Paramiko.

Python 101: Перемещение файлов между серверами (Перевод)


Если Вам часто приходится заниматься системным администрированием, тогда Вы знаете, что иногда Вам нужен скрипт, который бы перемещал файлы с одного сервера на другой. Я не системный администратор, но мне часто приходится сталкиваться с такой задачей. У Python есть сторонний пакет для этой цели. Мы посмотрим на paramiko, который зависит от PyCrypto (скачать PyCrypto можно с PyPI).

среда, 17 октября 2012 г.

wxPython in Action. Глава 12. Манипуляции с изображениями.

В этой главе Вы узнаете как:

  • Загружать изображения и создавать их
  • Создавать устройства контекста (device context)
  • Рисовать в устройствах контекста
  • Писать текст в устройствах контекста
  • Работать с карандашом, кистью и координатами устройств контекста

четверг, 11 октября 2012 г.

doctest для одной функции (Перевод)


К сожалению, нет такой функции вроде doctest.testfunc или doctest.testclass, или, на худой конец, doctest.testobj. Однако, Вы можете запустить доктест для одной функции или класса при помощи doctest.run_docstring_examples, вроде того:
doctest.run_docstring_examples(myfunction, globals=globals())
"Вот и славно", подумал я, "Так как моя функция не вызывает никаких глобальных переменных, я могу передать пустой словарь!" Не тут то было... run_doctstring_examples требует словарь ваших глобальных переменных, так как именно оттуда он получает объект для теста. Иначе вы получите ошибку:
NameError: name 'myfunction' is not defined
Документация говорит, что эта функция "используется редко", но по мне она очень полезна для интерактивного руководства на IPython Notebook, над чем я вскоре надеюсь начать работать!


Источник

среда, 5 сентября 2012 г.

Налоги, Теория игр, и Python (часть 1 из 2) (Перевод)


До того, как я стал образованным человеком, я изучал математику. И до сих пор меня бесит, что никто ещё не придумал как сделать математику интересной для математики (видимо, не читал Перельмана - прим. переводчика). Вот моя скромная попытка.
Давайте рассмотрим такой сценарий, основанный на том, что я знаю, не на том, что делаю ;-)

Новая функциональность Nikola: wordpress.com импортёр (Перевод)


Я реализовал первый набросок импортёра wordpress.com для Nikola. Работа ещё в процессе, но он уже может сделать из этого блога вот этот.
Что работает:
  • Посты
  • Страницы
  • Черновики
  • Теги
  • Персональная информация
Что не работает:
  • Комментарии
  • Ссылки вокруг страницы/поста не работают
  • Слишком общий вывод
Тут надо ещё тестить и тестить, так что качайте master и вперёд. Если предположить, что foo.xml - ваши данные с wordpress.com:
nikola_import_wordpress foo.xml
cd new_site
serve
doit && doi t
И вуаля - открывайте в браузере http://localhost:8000 и наслаждайтесь :-)
Для улучшения результата можно немного поработать над conf.py.

Релиз Nikola 4.0.2 (Перевод)


Новый релиз с исправлениями ошибок доступен для скачивания.

Новые возможности

  • Проапгрейжен до bootstrap 2.1.0
  • Итальянская локализация сделанная Pierpaolo Da Fieno
  • Индексоподобный страницы тегов с опцией TAG_PAGES_ARE_INDEXES

вторник, 4 сентября 2012 г.

Новости PyPy NumPy (Перевод)


Привет всем!
Уже прошло много времени с тех пор, как мы опубликовали последнее обновление numpy, но я рад сообщить, что работа над ним возобновлена. Много труда вложил Matti Picus, один из новых участников проекта PyPy. Пока ещё ничего из нижеперечисленного не было добавлено в код, рабоа над этим ещё продолжается:
  • Сложная поддержка dtype.
  • Исправлена несовместимость между numpy и версией pypy.
  • Переработан numpypy для упрощения кода, чтобы новые участники могли с ним легче работать.
  • Использовано много кода numpy без модификаций.
Сделать всё это планируется в следующем месяце.

Источник

понедельник, 3 сентября 2012 г.

Быстрое исправление: Обновление Zope Interface, чтобы Вы могли работать на Twisted trunk post-12.2 релиз (Перевод)


Вскорости после недавнего релиза 12.2, Twisted обновил требуемую версию Zope Interface.  Некоторые платформы уже поставляются с установленной версией Zope Interface, которая слишком стара для этого изменения. Вы можете обратить внимание на бесполезное сообщение об ошибке если Вы делали svn up до того, как услышали об этом изменении.

Релиз Twisted 12.2.0 (Перевод)


От имени Twisted Matrix Laboratories, я рад объявить о выходе Twisted 12.2.

воскресенье, 2 сентября 2012 г.

pyvideo статус: August 31st, 2012 (Перевод)



Что такое pyvideo.org

pyvideo.org - это сборник видео, связанных с Python в интернете. Большей частью это видео с различных конференций. Видели сессию, которая Вам понравилась и хотите показать её друзьям? Практически наверняка Вы сможете найти её на pyvideo.org и показать друзьям.

Статус

Вчера ночью я опубликовал видео с EuroPython 2011. Особая благодарность N, который озаботился метаданными для конференции. Это сэкономило мне уйму времени.

Вышел PyOpenGL 3.0.2b2 (Перевод)

Если Вы работаете с PyOpenGL кодом, сейчас самое время получить последнюю бета-версию. Предполагая постоянное обнаружение ошибок, это будет последняя бета перед финальным релизом 3.0.2. Уже доступен в PyPI.

PyCharm 2.6 Release Candidate (Перевод)


Мы получили большой отклик на наш бета-релиз (спасибо всем, сообщившим об ошибках!) и теперь мы рады дать нашим пользователям последнюю возможность изучить сборку и убедиться, что в ней не осталось больших проблем.
Сегодня мы публикуем Release Candidate PyCharm 2.6. Изменения в основном касаются исправления проблем производительности, вызванные плагином Flask и некоторые изменения для поддержки Python 3.3. Вы можете так же изучить примечания к релизу для этой сборки.
Увидимся на следующей неделе на DjangoCon US в Washington, DC!

пятница, 31 августа 2012 г.

cliff 1.2.1

Видимо предыдущая версия вышла без должного тестирования - уже сегодня выпустили версию 1.2.1. Вот изменения:

  • исправлена ошибка с пакетом документации
  • исправлена ошибка с импортом izip в listner.py

cliff -- Фреймворк работы с командной строкой - версия 1.2 (Перевод)


cliff - это фреймворк для создания программ командной строки. Он использует setuptools для предоставления субкоманд, форматирования вывода и других расширений.

Что нового в этом релизе?

  • Исправлена проблема с интерактивным режимом команды help.
  • Отключено логирование по умолчанию, зато добавлена опция --log-file для его активации при запуске.
  • Добавлена поддержка python 2.6. (при помощи Mark McClain для OpenStack Quantum)

Документация

Документация по cliff расположена на readthedocs.org

Установка

Используйте pip:
$ pip install cliff
В поисках подробностей смотрите руководство по установке.

Источник

среда, 29 августа 2012 г.

среда, 1 августа 2012 г.

Хватит использовать “print” для отладки: пятиминутное введение в модуль logging Python’а (Перевод)


  • Это руководство короткое
  • Для поиска ошибок в коде Вы можете использовать print для просмотра значений переменных
  • НЕ делайте этого. Используйте модуль logging

вторник, 31 июля 2012 г.

Определение имени процесса из Python (Перевод)


Поиск имени программы из которой был запущен модуль Python может быть сложнее, чем кажется на первый взгляд и поиск причин этого привёл меня к нескольким интересным результатам.
Несколько недель назад на OpenStack Folsom Summit, Mark McClain показал интересный код, который он обнаружил в исходниках Nova:
nova/utils.py: 339
script_dir = os.path.dirname(inspect.stack()[-1][1])
Этот код - часть логики поиска конфигурационного файла, который находится в папке, указанной относительно места запуска исходной программы. В этом коде мы смотрим на стек в поисках основной программы и оттуда получаем её имя.
Похоже, что этот код взят из ответа на вопрос с StackOverflow, и когда я первый раз его увидел, я подумал, что для решения такой проблемы это слишком проблемное решение. У Марка была похожая реакция и он спросил меня, не знаю ли я более простого способа сделать это.

понедельник, 30 июля 2012 г.

7.3.5. namedtuple() - фабричная функция для кортежей с именованными полями


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

пятница, 27 июля 2012 г.

Руководство по анализу производительности скриптов на Python (Перевод)


Поскольку не каждая программа на Python требует тщательного анализа производительности, отрадно знать, что когда такая необходимость возникает у Вас всё же есть отличные инструменты для этой цели.
Анализ производительности программы состоит в поиске ответа на четыре вопроса:
  1. Как быстро выполняется программа?
  2. Какое место определяет скорость её выполнения?
  3. Как много используется памяти?
  4. Где утечки памяти?
Посмотрим, что же у нас есть для ответа на эти вопросы.

Релиз CFFI 0.2


Вышел релиз CFFI 0.2 (а вскоре ожидается и 1.0). CFFI это способ вызова C из Python. Этот релиз касается только CPython 2.6 или 2.7. Поддержка PyPy будет в ветке ffi-backend, но она ещё не реализована.Поддержку CPython 3.x сделать легко, но нужна для этого помощь.
Пакет доступен на bitbucket и хорошо документирован. Кроме того Вы можете просто установить его из python package index: pip install cffi
В этом релизе:

четверг, 26 июля 2012 г.

wxPython: Использование wx.Timer (Перевод)


Последние несколько недель я видел большое количество вопросов по поводу таймеров в wxPython. Так что я решил, что пришло время написать пару скриптов чтобы показать, как они работают. Я разберу два примера: в первом у меня будет один таймер, во втором - два. Robin Dunn связался со мной и несколько улучшил мои примеры, так что к этой статье приложены и переработанные варианты моих скриптов.

среда, 25 июля 2012 г.

Сериал "Python PDF" – Обзор metaPDF (Перевод)


Исследуя библиотеки для работы с PDF на Python, я наткнулся на ещё один маленький проект с названием metaPDF. Судя по указанному на сайте этого проекта, metaPDF это лёгкая библиотека для Python, оптимизированная для получения и вставки метаданных, по сути это легковесная обёртка вокруг замечательной библиотеки pyPdf. Я не уверен в том, что эта библиотека будет полена с учётом возможности работы с самой библиотекой pyPdf, так что давайте посмотрим на неё в деле.

вторник, 24 июля 2012 г.

Python 101: Загрузка файла при помощи ftplib (Пароль)


Есть несколько способов загрузки файла из интернета при помощи Python. Одним из самых популярных способов является подключение к FTP серверу и скачивание файла. Этим мы и сейчас займёмся. Всё, что нам понадобится - стандартная установка Python. В неё включена библиотека ftplib, которой нам вполне хватит.

понедельник, 23 июля 2012 г.

Парсинг XML и создание PDF Invoice при помощи Python (Перевод)


Обратите внимание: Этот пост был первоначально опубликован на Dzone. Я изменил заголовок, поскольку я уже писал несколько XML парсеров и не хочу запутать моих читателей.
Одна из задач, с которыми я часто сталкиваюсь в своей работе - это взять данные в одном формате, обработать их и создать отчёт или какой-то другой документ. Сегодня мы посмотрим на то, как взять XML ввод, распарсить его при помощи Python и затем создать отчёт при помощи Reportlab - стороннем пакете для Python. Давайте предположим, что моя компания получила заказ на три предмета, который я должен выполнить. Такой XML может выглядеть так:

воскресенье, 22 июля 2012 г.

wxPython: Как программно открыть другую вкладку wx.Notebook (Перевод)


Я тут встретил в wxPython users group вопрос о том, как можно программно изменить открытую вкладку в wx.Notebook. Вот код, который у меня работает:

пятница, 20 июля 2012 г.

Знакомимся с virtualenv (Перевод)


Виртуальное окружение может быть очень полезно для тестирования программ. Ian Bicking создал проект  virtualenv, который и является инструментом для создания изолированного окружения Python. Вы можете использовать эти окружения для проверки новых версий ваших программ, новых версий пакетов, которые Вы используете или просто в качестве песочницы для новых пакетов. Кроме того, Вы можете использовать virtualenv в качестве рабочего места в случаях, если Вы не можете копировать файлы в site-packages по какой-либо причине. Когда Вы создаёте виртуальное окружение при помощи virtualenv, он создаёт папку и копирует Python в неё с папкой site-packages и несколькими другими. Кроме того устанавливается pip. Пока активно ваше виртуальное окружение оно используется как обычный Python. Когда же Вам оно перестаёт быть нужным - Вы просто удаляете папку. И всё. Или можете продолжать её использовать для работы.
В этой статье мы потратим немного времени для знакомства с virtualenv.

четверг, 19 июля 2012 г.

Python 101: pip –замена для easy_install (Перевод)


Pip Installs Python или pip - это инструмент для установки и управления пакетами Python, многие из которых расположены на Python Package Index (PyPI). Он является альтернативой easy_install. В этой статье мы потратим немного времени на то, чтобы посмотреть, как он работает и как он может помочь нам в нашей работе с Python.

среда, 18 июля 2012 г.

wxPython и нити (Threads) (Перевод)


Если Вы часто используете GUI в Python, тогда Вы знаете, что иногда требуется запускать процессы, выполняющиеся значительное время. И, если Вы реализуете это так же, как делаете в программах для командной строки, Вы будете очень удивлены. В большинстве случаев, Вы увидите просто "зависшую" программу, так как цикл обработки событий будет ждать завершения вашей длительной процедуры. Что в таком случае можно сделать? Запустить эту задачу в отдельной нити или в отдельном процессе! Этим мы с Вами сейчас и займёмся!

вторник, 17 июля 2012 г.

wxPython and PubSub: A Simple Tutorial (Перевод)


Я видел некоторое количество вопросов в списке рассылки wxPython и на IRC каналах про коммуникацию между фреймами. И практически всегда разработчикам требовался PubSub модуль. Модель Publisher / Subscriber - это способ послать сообщения одному или более получателю. Об этом Вы можете почитать здесь. Шаблон Observer (Наблюдатель) как раз и основывается на этой модели. В мире wxPython у нас есть модуль pubsub, который доступен посредством wx.lib.pubsub. Он включён в wxPython, но его можно загрузить и как отдельный модуль с Forge. В качестве альтернативы можно использовать и модуль PyDispatcher.
В любом случае, в этой статье мы не будем заниматься теорией. Вместо этого мы рассмотрим полу-практический пример в wxPython для того, чтобы показать, как можно использовать pubsub для обмена информацией между двумя фреймами. Если Вы всё ещё со мной - то давайте начнём!

понедельник, 16 июля 2012 г.

Внезапный цикл при использовании multiprocessing. Есть ответ!

Разбирался я с запуском алгоритма в нескольких процессах. Для начала я понял, что через IDLE multiprocessing тестировать невозможно. Написал файл:

wxPython: Создаём ваш собственный кросс-платформенный монитор процессов при помощи psutil (Перевод)


На этой неделе я столкнулся с интересным проектом на Python под названием psutil на Google Code. Он работает на Linux, Windows, OSX и FreeBSD. Что он делает? Он собирает все работающие процессы и выдаёт Вам информацию о них, предоставляя так же возможность их завершения. Неплохо, подумал я, сделать для него GUI и получить собственный диспетчер задач / монитор приложений на wxPython. Если у Вас есть время - я приглашаю Вас в путешествие по 4 итерациям моего кода.

воскресенье, 15 июля 2012 г.

wxPython: Как создать мастер (Wizard) (Перевод)


Как-то раз на StackOverflow я увидел, что кто-то с переменным успехом борется с виджетом Wizard из wxPython. Мастер (wizard) не даёт больших возможностей по настройке, если взять его самого по себе, так что я решил посмотреть, насколько сложно будет написать мастера самому. Код достаточно краток, но это моя первая бета-версия:

пятница, 13 июля 2012 г.

Python 101: easy_install или как создавать яйца (eggs) (Перевод)


Сегодня мы посмотрим противоречивый метод установки модулей и пакетов Python - easy_install. Мы так же узнаем как создавать собственные файлы *.egg. Для этого Вам понадобится пакет SetupTools. Этот пакет не поддерживает Python 3.x, так что если Вы работаете в третьей версии - смотрите в сторону pip или distribute. Про каждый из этих проектов я ещё напишу. Теперь давайте же начнём с SetupTools и easy_install.
SetupTools - это основной метод загрузки и установки пакетов Python с PyPI и других источников при помощи командной строки, что-то вроде apt-get для Python. Когда Вы установите SetupTools, заодно устанавливается скрипт или exe файл с названием easy_install, который Вы можете использовать для установки и обновления пакетов. Он так же позволяет Вам создавать eggs. Давайте потратим немного времени для знакомства с этой утилитой.

четверг, 12 июля 2012 г.

PyPDF2: новый форк pyPdf (Перевод)


Сегодня узнал, проект pyPDF НЕ умер, как я думал раньше. На самом деле он перешёл в PyPDF2 (видите небольшую разницу в написании?). Есть так же вероятность того, что кто-то занимается и оригинальной версией проекта. При желании, за судьбой PyPDF2 можно следить на reddit. Тем временем я решил посмотреть, чем же PyPDF2 отличается от оригинала. Так что если у Вас есть пара свободных минут - милости просим.

среда, 11 июля 2012 г.

list и list.remove() - внимание


Дописывая свою программу для отображения задач из Lightning, долго не мог понять (вообще получить по этой теме информацию, кроме как читать исходники не возможно... а в С я не в зуб ногой, тем более такого объёма), как удалять из вывода повторяющиеся задачи. Путём длительных алхимических изысканий вроде как понял, что за это отвечает поле flags из таблицы cal_todos. Это битовая маска,5ый бит которой вроде и означает повторяющуюся задачу. Соответственно код
for t in tasks:
    elif t.flags & 16 :
        tasks.remove(t)
должен был спасти отца русской демократии. Но не тут то было...

Введение в pyfpdf – Простая библиотека для создания PDF на Python (Перевод)

Сегодня мы посмотрим на простую библиотеку для создания PDF, которая называется pyfpdf и является портом библиотеки FPDF для PHP. Она не может заменить Reportlab, но даёт Вам более чем простую возможность создавать PDF файлы. Давайте на неё посмотрим.

вторник, 10 июля 2012 г.

Python 201: Введение в distutils (Перевод)


В прошлый раз мы узнали как создавать модули и пакеты. Сегодня мы возьмём этот пакет и посмотрим, как при помощи distutils мы можем сделать этот пакет доступным для других людей. Мы научимся: 
  • создавать файл setup.py
  • создавать source distribution
  • создавать установщик для Windows
Начнём!

понедельник, 9 июля 2012 г.

Python 201: Создание модулей и пакетов (Перевод)


Создание модулей на Python - это то, что большинство программистов делают каждый день. Каждый раз, когда Вы создаёте скрипт - Вы создаёте новый модуль. Вы можете импортировать ваш модуль в другие модули. Пакет - это набор модулей. То, что Вы импортируете в ваши скрипты из стандартной библиотеки - это тоже модули или пакеты. В этой статье мы посмотрим на то, как создаются модули и пакеты, но больше времени потратим именно на пакеты, так как они чуть сложнее.

воскресенье, 8 июля 2012 г.

Быстрое введение в pdfrw (Перевод)


Я всегда наблюдаю за библиотеками для Pytho для работы с  PDF и в один прекрасный день я столкнулся с pdfrw. Это похоже на аналог pyPDF, так как позволяет Вам читать и записывать PDFы, объединять их и использовать Reportlab для пометки их водяными знаками, кроме всего прочего. Проект немного мёртв, так как последнее обновление было в 2011 году, но с учётом того, что pyPDF обновлялся в 2010 - это не так уж и плохо. В этой  статье мы проведём небольшой тест-драйв pdfrw и посмотрим, на что он годен. Поехали!
Заметка об установке: К сожалению у этой библиотеки нет скрипта setup.py, так что Вам придётся получить исходники с Google Code а затем скопировать папку pdfrw в site-packages или в ваш virtualenv.

понедельник, 11 июня 2012 г.

pylibftdi v0.10 released (Перевод)

Я недавно выпустил версию 0.10 pylibftdi - "минимального питонного интерфейса для libftdi", предназначенного для наиболее лёгкого (из всех возможных?) способов работы с чипами и модулями FTDI имитирующими последовательный порт при подключении к usb. Версия 0.10 добавляет несколько новых возможностей и исправляет несколько ошибок.
Долгое время я был в плену заблуждения, что номера версий должны соответствовать правилам десятичной системы, и что после версии 0.9 должна идти версия 1.0. Но, поскольку, я хочу, чтобы версия 1.0 была стабильной (а нынешний статус я всё ещё рассматриваю как "бета"), я попал в тупик. В итоге я решил, что новая версия будет иметь номер 0.10. В любом случае, я всё ещё хочу улучшить документацию (и не только) перед выпуском 1.0.
Изменения в 0.10
  • Запуск юнит-тестов теперь проще благодаря некоторым реорганизациям - просто выполните python -m unittest discover в папке верхнего уровня
  • Поддержка устройств FT232H - это другой PID (USB product ID) для тех устройств, которые я раньше использовал - в основном FT245BM/RL, FT232R/RL. Все эти устройства имели PID 0x6001, тогда как новый FT232H имел PID 0x6014. Я экспериментировал с дополнительными параметрами для определения VID и PID целевого устройства, но это оказалось слишком сложно для конечного пользователя, а я бы хотел, чтобы pylibftdi можно было бы использовать с параметрами по умолчанию для большинства основных операций. В итоге я взял два списка (USB_VID_LIST,USB_PID_LIST) и код поиска устройства должен просто провести итерации по их декартову произведению (то есть вложенный цикл, реализованный через itertools.product). Так что добавление новых PID в будущем будет простым - надо лишь добавить его в  USB_VID_LIST, и тогда устройство может быть открыто без параметров конструктором Device() если на USB шине есть только FTDI устройство.
  • Устройство при открытии устанавливается в параллельный режим. В рассылке libftdi был спор о том, как эту логику реализовать, но в pylibftdi это сделать достаточно легко. Вообще это позволяет избежать неопределённого состояния, так как раньше, если предыдущее приложение, которое работало с устройством в режиме BitBang, то новое открытие устройства при помощи Device() отрывало его тоже в режиме BitBang, а не в ожидаемом  параллельном режиме (для устройств, которые поддерживают оба режима).
  • В конструктор Device() добавлен параметр 'buffer_size' (по умолчанию равен 0, что соответствует поведению раньше), который разбивает на куски операции чтения и записи. Это позволяет избежать проблемы, когда вызов (например) dev.write ('hello' * 100000) при передаче 9600 занимал невероятно много времени, а так как он протекал в контексте библиотеки (через вызов ctypes), его нельзя было прервать при помощи Ctrl-C
  • Убрана устаревшая возможность использовать Driver() как синоним Device()
  • Обновлено: Я уже сделал два дополнительных релиза в последние часы - текущая версия - 0.10.2. Одним из значимых изменений является то, что теперь субпакет exmaples включён в sdist, так что python -m pylibftdi.examples.led_flash будет работать, если у Вас диод подключён к D0 на устройстве.
Планы на будущее: причесать, добавить примеры, улучшить документацию...

Nikola 3 вышел и он хорош (Перевод)


Я только что выпустил версию 3 моего статичного генератора сайта Nikola
Это большой релиз. Вы почти не сможете найти код из предыдущей версии, который не был так или иначе изменён!
Основные возможности Nikola:
  • Блоги с тегами, лентами (feeds), архивами, комментариями и т.д.
  • Темы
  • Быстрая сборка благодаря doit
  • Гибкость
  • Небольшое количество кода (программисты смогут в нём разобраться за несколько часов)
  • использование reStructuredText и Markdown как языков для ввода данных
  • Простая галерея изображений (просто перетащите файлы в папку!)
  • Подсветка синтаксиса почти для всех языков программирования или разметки
  • Многоязычные сайты
  • Не изобретает велосипедов, а использует сущесвующие инструменты

virtualenvwrapper 3.5


Что такое virtualenvwrapper?


virtualenvwrapper - это набор расширений для инструмента Ian Bicking'а virtualenv. Расширение включает в себя обёртки для создания и удаления виртуального окружения и управления потоком вашей разработки, что упрощает одновременную работу более чем с одним проектом, не попадая при этом в конфликты, вызванные их зависимостями.

Что нового?

  • Переписана cpvirtualenv для использования virtualenv-clone. Это сделал Justin Barber (barberj). Это так же решает проблему с тем, что cpvirtualenv не уважает флаг --no-site-packages (issue 102).
  • Апдейт документации со ссылкой на порт virtualenvwrapper-win David'a
    Marble.
  • Используется command чтобы избежать возможности именования функций так же как и общие утилиты. (issue 119)

Установка

Посетите страницу проекта virtualenvwrapper для получения инструкций по установке.


Источник