вторник, 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.