tsygam
Сен. 22, 2012 22:18:44
Доброго времени суток!
В Питоне совсем новичок. Пытаюсь запустить сервер библиотеки -
http://github.com/manuq/pathagar на ARMe (seagate goflex satellite, там web интерфейс на django).
Стоит python 2.6.2, но установить lxml возможности нет (уже пытался - имеющаяся скомпилированная библиотека требует readline, которая в свою очередь портит locale что практически исключает работу с русскими именами файлов и т.п. + остается очень мало места на tmpfs)
решил попробовать использовать xml вместо lxml благо lxml используется лишь при импорте epub и похоже лишь для несложного парсинга (в других местах проекта lxml вроде не используется). Для этого в epub.py и epupinfo.py (они в папке books) заменил from lxml import etree на import xml.etree.ElementTree as etree и получаю ошибку AttributeError: module object has no attribute iterfind. Другие попытки приводят к еще большему кол-ву ошибок. В общем похоже я что то концептуально упускаю.
Помогите плз грамотно заменить использование lxml на xml.
PS: запуск импорта - python manage.py addepub путь к директории с epubs. (addepub.py в папке books/management/commands). Помимо django нужны django-tagging и django-sendfile, у меня все это есть.
odnochlen
Сен. 23, 2012 00:20:14
Вроде бы на lxml больше всего похож cElementTree.
tsygam
Сен. 23, 2012 01:05:00
спасибо, попробовал - но в отладчике AttributeError: ‘iterfind’
а разве cElementTree не идентичен ElementTree но только реализованный на C?
odnochlen
Сен. 23, 2012 16:58:23
Именно. Скорость тебе не нужна разве?
tsygam
Сен. 23, 2012 20:26:30
нужна, но сначала нужно чтобы заработало а оно не работает
odnochlen
Сен. 23, 2012 21:28:08
Ну от того, что ты заменишь cElementTree на ElementTree что-то поменяется?
А что ты хочешь? Найти какой-то модуль в питоне искаропки, который имел бы на 100% то же апи, что и lxml?
tsygam
Сен. 24, 2012 00:28:01
почти - в рассматриваемом проекте вроде нет никакой экзотики и функциональность lxml не очень нужна
нашел причину ошибки - в xml который стоит на устройстве оказывается просто нет iterfind.
осталось победить UnicodeEncodeError
odnochlen
Сен. 24, 2012 00:52:47
tsygam
в xml который стоит на устройстве оказывается просто нет iterfind.
А там какой-то особый? Тогда сдаюсь.
Так ты под xml портируешь?
tsygam
почти - в рассматриваемом проекте вроде нет никакой экзотики и функциональность lxml не очень нужна
Без правки кода не обойтись.
tsygam
Сен. 24, 2012 16:59:51
XML там не особый, но его история заканчивается 2005-03-02 и видимо тогда iterfind еще не был реализован.
Я хочу заставить проект работать с библиотекой xml а не lxml. Для проверки пока просто переписал ElementTree.py и ElementPath.py от 2.7 в /usr/lib/Python2.6/xml/etree (потом нужно будет в коде проекта реализовать iterfind - можно просто скопировать) - до некоторой степени заработало.
Теперь мучаюсь с UnicodeEncodeError: при попытке сохранить файл - ‘ascii’ codec can't encode characters in position ……: ordinal not in range(128) . Имена файлов русские (с английскими все нормально) на диске с NTFS смонтированном /media/sda1, в терминале вижу их нормально, а питон странную кодировку показывает
>>> sys.getfilesystemencoding()
'ANSI_X3.4-1968'
>>> locale.getdefaultlocale()
('en_US', ‘UTF8’)
>>> sys.stdout.encoding
'ANSI_X3.4-1968'
>>> sys.getfilesystemencoding()
'ANSI_X3.4-1968'
>>> locale.getpreferredencoding()
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “/python/lib/python2.6/locale.py”, line 549, in getpreferredencoding
File “/python/lib/python2.6/locale.py”, line 513, in setlocale
locale.Error: unsupported locale setting
>>> locale.getpreferredencoding(do_setlocale=False)
'ANSI_X3.4-1968'
Что еще странно, так это то, что родной web интерфейс (тоже на (Django/Python) загружает русские файлы без проблем.
может кто знает где собака порылась?
tsygam
Сен. 27, 2012 10:17:08
Если кому интересно:
причиной проблемы с кодировкой (UnicodeEncodeError) было отсутствие locale в системе. Не отсутствие LANG, LC_ALL и т.п. в переменных окружения, а именно отсутствие установленной кодировки utf-8 для файловой системы. Как оказалось это приводит к использованию питоном (по крайней мере 2.6.2) кодировки ANSI_X3.4-1968 для файловой системы. Т.е. не зная какую кодировку поддерживает файловая система, питон не дает выставить ее принудительно, а использует то, что точно есть в системе.
Правда остается вопрос, почему родной web интерфейс (тоже на (Django/Python) загружает русские файлы без проблем без установленной locale. Может кто знает?