Показаны сообщения с ярлыком python. Показать все сообщения
Показаны сообщения с ярлыком python. Показать все сообщения

Компиляторы Python


Для сборки кода на python в исполняемый файл можно воспользоваться одним из комиляторов:

PyInstaller(cross-platform), py2exe (Windows), cx_Freeze(cross-platform), py2app (Mac).

Эти утилиты собирают все модули и файлы данных в один исполняемый (для данной операционной системы) файл, который может запускаться на любом компьютере без установленного Python'а.

Python в микроконтроллере: p14p

На просторах интернета наткнулся на проект python-on-a-chip,- энтузиасты разрабатывают урезанную виртуальную машину (Virtual Machine, VM) Python с кодовым названием PyMite, которая сможет выполнять код Python на микроконтроллерах без участия какой-либо операционной системы.

Промежуточные итоги

Смотрю статистику в Google Analitycs,- оказывается пропустил маленькое, но гордое событие: суточная посещаемость на сайте доросла до отметки 100+. В основном поисковый трафик, но есть и около 10% ссылочного трафика. Народ ищет разное, в основном про МультиФон, но есть и эcтеты, которых интересует обжим (распиновка) E1. В лидерах ключевых слов поискового трафика, как ни странно, не МультиФон, а PyScripter,- неплохой редактор (почти IDE ;-) для языка Python. Однако, для рефакторинга PyScripter не очень подходит, в последнее время начал иногда использовать IDE Eclipse с установленным PyDev. Если бы не лишний вес, пользовался бы эклипсом, хотя с рефакторингом там тоже не всегда всё хорошо. Но зато Eclipse c PyDev понимает проекты для Django.

XLWT - создание Excel в Python

Очередной квест про программирование на Python,- помимо потребности прочитать Excel из Python появилась необходимость создать файл Microsoft Excel. Оказалось, что для xlrd (чтение Excel) существует парный пакет xlwt,- для создания файлов. Пакет позволяет создавать файлы с несколькими вкладками (sheet), применять форматирование в ячейках, вставлять формулы и кучу других полезных вещей. Поддержка кодировок на уровне, для русского языка достаточно при инициализации файла (книги, workbook) указать требуемую кодировку:

book = xlwt.Workbook(encoding='cp1251')

Все строки будут прозрачно перекодированы при записи в ячейки, если, конечно, вы пишете на python в UTF-8.

ef bb bf - ползёт разметка в Django

Столкнулся с необъяснимым на первый взгляд явлением,- на одной из страниц Django'вского приложения необъяснимо разваливалась разметка страницы. Только на одной. Смотрю исходник страницы,- на первый взгляд всё в порядке, только какая-то чёрточка странная и посторонняя в самом начале HTML кода. Причём эта самая необъяснимая чёрточка видна далеко не во всех редакторах. В попытке вяснить причину добрался аж до просмотра в HEX,- оказалось, что там целые 3 байта EF BB BF, а не чёрточка. Остальное дело техники: эти байты,- признак ByteOrderMark. Осталось просмотреть все шаблоны, из которых генерируется страница, поскольку BOM может быть в любом из файлов, даже вложенном. У меня оказалось, что BOM присутствует в файле шаблона аж на третьем уровне вложенности шаблонов. Не забывайте проверять, в каком формате сохраняете файлы

Внешние скрипты для проекта Django

Несколько раз сталкивался с ситуацией, когда удобнее использовать скрипт вне методов проекта models-views. При этом хочется использовать объявленные в models классы. При написании такого скрипта "в лоб", пытливый программисткий ум обычно лицезреет ошибку:

ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.

Простой и не всегда удобный вариант,- добавить DJANGO_SETTINGS_MODULE в переменные окружения командной строки (умолчания для cmd.exe,- если в Windows или export в Linux\Unix). Ещё более короткий и переносимый способ,- сделать всё необходимое непосредственно в скрипте:

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

Имя myapp.settings,- это если скрипт лежит в папке на уровень выше, чем myapp/settings. Если в той-же папке,- то будет просто settings

wxPython в Windows7

Поставил portablePython для тестирования и разработки в недружественных корпоративных условиях (да-да, на моём рабочем компьютере у меня нет администраторских прав). При тестах простейшего графического приложения с использованием wxPython выявилась неприятная особенность,- при MouseOver над окном приложения puthon.exe тупо умирает. Думал,- какое-то событие неправильно обрабатывается, пробовал перехватывать,- результата не дало. Гугление показало, что проблема в версии Python,- в 2.5.x всё работает, а в ветке 2.6 ошибка проявляется. Обещают починить в 2.8.10. Пока откатился на 2.5.4.

PyLDAP: Авторизация в AD

Наткнулся на вредную багу при авторизации в ActiveDirectory: после успешного ldap.bind() получал ошибку "In order to perform this operation a successful bind must be completed on the connection". Решение нашлось в официальном FAQ python-ldap:

When searching from the domain level MS AD returns referrals (search continuations) for some objects to indicate to the client where to look for these objects. Client-chasing of referrals is a broken concept since LDAPv3 does not specify which credentials to use when chasing the referral. Windows clients are supposed to simply use their Windows credentials but this does not work in general when chasing referrals received from and pointing to arbitrary LDAP servers.
Therefore per default libldap automatically chases the referrals internally with an anonymous access which fails with MS AD.


Если по русски,- иногда AD-сервер возвращает ссылки на дополнительные сервера, на которых могут быть дополнительные результаты поиска. По умолчанию libldap пытается получить результаты с помощью анонимного доступа, в случае с Active Directory этот номер не проходит.
Решается добавлением l.set_option(ldap.OPT_REFERRALS,0) после ldap.initialize().


l = ldap.initialize('ldap://foobar')
l.set_option(ldap.OPT_REFERRALS,0)

Метод как свойство объекта в Python


Всё-таки Python красивый язык. Свойство объекта может быть определено как специальный метод экземпляра объекта. Практически это позволяет обращаться к свойству как по имени, так и с помощью метода (getter или setter, или и то и другое в зависимости от операции). Кроме того, такие обращения к методу позволяют при получении и установке свойств выполнять дополнительные операции, например изменять счётчик обращений к свойству объекта.

API к Я.ру

 Сначала вКонтакте открывает XMPP, теперь вот Яндекс запустил бету API к Я.ру. Гораздо интереснее не сама новость, а рассказ Ивана Сагалаева о том, как всё это делалось и устроено внутри. API сделано в соответствии с идеологией REST. Помимо собственно API сделан также сервис OAuth-авторизации для этого и других API Яндекса. В блоге яндекса есть даже пример кода на Python, реализующий смену настроения пользователя.

Возникает такое ощущение, что рунет начинает потихонечку обрастать такими сервисами, позволяющими интегрироваться друг-в-друга с применением общедоступных API, и это есть хорошо.

Отладка в GAE (Python)

При разработке приложения GAE (Google Application Engine) на Python часто возникает потребность в выводе отладочной информации. Вдумчивое изучение документации показало, что надо использовать стандартный модуль logging, как описано в документации GAE. Вывод отладочных сообщений осуществляется с помощью функций info(), debug() и т.д. Отладочные сообщения выводятся в консоль запущенного dev_appserver. Отладка в опубликованном приложении может быть просмотрена в консоли администрирования.

XLRD - читалка Excel для Python

Понадобилось по работе забивать данные из нескольких разноформатных файлов Excel в одну единообразную базу MySQL. Данных было много, вручную вбивать,- долго, да и ошибок можно наделать (ага, тот самый человеческий фактор). Естественным образом появилось желание автоматизировать этот ужос. Встроенный в MS Office VisualBasic показался некошерным по нескольким причинам: во-первых,- я его не очень хорошо знаю, а во-вторых,- не кроссплатформенно. Из других доступных языков под руками только Java и Python. Полез искать, что у нас есть в питоне для чтения Excel и нашёл чудесную совершенно библиотеку XLRD. Работает на любой платформе, где есть Python, легко читает всё что нужно. Небольшая проблема,- не читает формат xlsx (MS Office 2007), особо не вникал в чём проблема.

За запись Excel в Python отвечает парный пакет XLWT

UTF в Python

Чтобы использовать юникод в исходных кодах python, например в комментариях или значениях констант, нужно уведомить интерпретатор Python о том, что в коде присутствуют символы не из набора ASCII. Для этого нужно вставить в первой или второй строке комментарий специального вида:

# -*- coding: utf-8 -*-

Синтаксис комментария впервые введён в редакторе Emacs для установки локальных для файла переменных. Emacs поддерживает множество различных переменных, но в python поддерживается только 'coding'. Обрамляющие символы -*- показывают, что комментарий является специальной настройкой. Внутри комментария устанавливается имя переменной coding и значение, разделённое двоеточием

Яйца Питона

Чтобы увидеть пасхальные яйца,- стихи, зашитые в интерпретатор Питона, достаточно набрать команду

$ python -m this


UPD: в Python3 тоже работает 

Собственные библиотеки модулей в скриптах Python

Не в первый раз уже напарываюсь,- Python не находит пакет при импорте:

приложение (скрипт), использует собственные пакеты. Модули лежат в папке classes рядом со скриптом. Один из модулей называется, к примеру, examplemodul.py и содержит exampleclass.py. В скрипте:

from classes.examplemodul import *

.... и получаем ошибку при запуске

PyScripter: Редактор для питоновода


Понадобился качественный редактор для питона,- с подсветкой кода, автоматическим дополнением и прочими удобствами. Вообщем, не редактор, а полноценная IDE. Причём, для изначально враждебного окружения, т.е. под винду. Гугл выдал несколько ссылок на полезные форумы, где и нашлась ссылка на PyScripter. Программа не "без чудес",- сразу натолкнулся на проблему с поиском python25.dll,- но после прописания всех необходимых путей программа запустилась (надо признать, что версия Python 2.6 пока не поддерживается). На вид,- нормальная среда разработки, с окнами Output, CallStack, Watches, Breackpoints и т.д. Подсветка кода настраивается, настройки переносятся в ini-файле вместе с программой, например, на USB-флешке. Посмотрим, каково оно будет в работе.

Python: dict из 2 массивов

В который раз уже забываю и снова приходится искать, как в python создать словарь(dict) из двух массивов, значения из первого массива будут ключами (keys), значения второго,- значениями хеша (values):

hash = dict(zip(keys, values))


Как сделать тоже самое на многих других языках, включая Ada, Prolog,Scala и TCL, можно посмотреть на rosettacode.org

ЗЫ: ключевые слова: знерщт вшсе ;-)

Менеджер: перезагрузка

Долго искал блуждающую багу в приложении на django: в какой-то момент функция get_object_or_404 начала выдавать ошибку AttributeError: 'list' object has no attribute 'model'. В принципе понятно, что где-то вместо модели вылезает список (list), но где и почему,- непонятно. Гугление результатов не дало,- конкретно такой ошибки, похоже, ни у кого не возникало, поэтому пришлось копаться до тех пор, пока не снизошло озарение. Оказалось всё просто: get_object_or_404() неявно вызывает метод all() стандартного менеджера моделей models.Manager. А у меня хватило ума переопределить этот метод в свойм кастомном менеджере, и не просто переопределить,- у меня он выполнял совсем другие задачи. Переименование метода в get_all() вернуло всё на своё место.

Полный список методов, которые не надо случайно переопределять, можно посмотреть в онлайн-трекере Django, начиная со строки class Manager(object):