Найти - Пользователи
Полная версия: как правильно заменить использование lxml на xml?
Начало » Python для новичков » как правильно заменить использование lxml на xml?
1
tsygam
Доброго времени суток!

В Питоне совсем новичок. Пытаюсь запустить сервер библиотеки - 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
Вроде бы на lxml больше всего похож cElementTree.
tsygam
спасибо, попробовал - но в отладчике AttributeError: ‘iterfind’
а разве cElementTree не идентичен ElementTree но только реализованный на C?
odnochlen
Именно. Скорость тебе не нужна разве?
tsygam
нужна, но сначала нужно чтобы заработало а оно не работает
odnochlen
Ну от того, что ты заменишь cElementTree на ElementTree что-то поменяется?

А что ты хочешь? Найти какой-то модуль в питоне искаропки, который имел бы на 100% то же апи, что и lxml?
tsygam
почти - в рассматриваемом проекте вроде нет никакой экзотики и функциональность lxml не очень нужна

нашел причину ошибки - в xml который стоит на устройстве оказывается просто нет iterfind.
осталось победить UnicodeEncodeError
odnochlen
tsygam
в xml который стоит на устройстве оказывается просто нет iterfind.
А там какой-то особый? Тогда сдаюсь.

Так ты под xml портируешь?

tsygam
почти - в рассматриваемом проекте вроде нет никакой экзотики и функциональность lxml не очень нужна
Без правки кода не обойтись.
tsygam
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
Если кому интересно:

причиной проблемы с кодировкой (UnicodeEncodeError) было отсутствие locale в системе. Не отсутствие LANG, LC_ALL и т.п. в переменных окружения, а именно отсутствие установленной кодировки utf-8 для файловой системы. Как оказалось это приводит к использованию питоном (по крайней мере 2.6.2) кодировки ANSI_X3.4-1968 для файловой системы. Т.е. не зная какую кодировку поддерживает файловая система, питон не дает выставить ее принудительно, а использует то, что точно есть в системе.

Правда остается вопрос, почему родной web интерфейс (тоже на (Django/Python) загружает русские файлы без проблем без установленной locale. Может кто знает?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB