Архив

Публикации с меткой ‘python’

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

28 Ноябрь 2011


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

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

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

23 Ноябрь 2011

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

,

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

17 Ноябрь 2011

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

, ,

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

22 Декабрь 2010

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

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

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

, ,

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

10 Ноябрь 2010

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

, , , ,

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

21 Сентябрь 2010

Несколько раз сталкивался с ситуацией, когда удобнее использовать скрипт вне методов проекта 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

14 Сентябрь 2010

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

,

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

6 Сентябрь 2010

Наткнулся на вредную багу при авторизации в 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

18 Август 2010

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

  1. class MyClass(object):
  2.    def get_a(self):
  3.       return self._a + 1
  4.    def set_a(self, value):
  5.       self._a = value - 1
  6.    a = property(get_a, set_a, doc="Off by one a")
  7.  
  8. # Python 2.6 style
  9. class MyClass(object):
  10.    @property
  11.    def a(self):
  12.       return self._a + 1
  13.    @a.setter #makes the property writeable
  14.    def a(self, value):
  15.       self._a = value - 1

,

API к Я.ру

4 Август 2010

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

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

, , ,