Найти - Пользователи
Полная версия: Импорт lxml при запуске из IDE и из консоли
Начало » Python для новичков » Импорт lxml при запуске из IDE и из консоли
1
Freest
Добрый день.
В Eclipse + PyDev написал небольшой скрипт, использующий lxml. Сам импорт модуля выполняется так:

from lxml import etree

В эклипсе все прекрасно отрабатывает, но стоит попробовать выполнить эту строку в интерпретаторе в консоли - вываливается с ошибкой:

Python 2.7.3 (default, Oct 12 2012, 16:19:39)
on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> from lxml import etree
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “lxml.etree.pyx”, line 134, in init lxml.etree (src/lxml/lxml.etree.c:179662)
TypeError: encode() argument 1 must be string without null bytes, not unicode

Помогите понять, плз, как бороться, куда рыть.
odnochlen
УМВР.

Freest
lxml.etree.c:179662
Эт че за наркоманство?
Freest
odnochlen
Эт че за наркоманство?
Если честно, я вообще не понимаю, куда ссылается эта строка.
s0rg
Freest
Если честно, я вообще не понимаю, куда ссылается эта строка.
А надо бы…
Эта строка ссылается на С-шный сорс, но не в нем дело, обратите внимание на то,
откуда он вызывается:
Freest
File “lxml.etree.pyx”, line 134
Гугл -> lxml.etree.pyx попадаем сюда.
Смотрим на 134 строку:
cdef bytes _FILENAME_ENCODING = (sys.getfilesystemencoding() or sys.getdefaultencoding() or 'ascii').encode(u"UTF-8")
Итого имеем проблемы с разностью локалей при запуске в эклипсе и консоли.

P.S. И да, УМВР
odnochlen
Freest
src/lxml/lxml.etree.c:179662
Я имею в виду - это что, 179662-я строка??
reclosedev
odnochlen
Я имею в виду - это что, 179662-я строка??
Да это Cython нагенерировал из lxml.etree.pyx (там 3,2к )
odnochlen
Не наркоманство ли? 3,2 к в оригинальном исходнике?
Freest
Действительно, с кодировками что-то непонятное у меня в системе (
sys.getdefaultencoding()
В эклипсе возвращает ‘utf-8’, а в консоли ‘ascii’
lxml, оказывается, прекрасно цепляется под рутом, под моим юзером вылетает эта ошибка, но если ввести команду импорта повторно - цепляется и работает.. Мистика..

Т.к. скрипт написан для личных нужд и запускается на личном ноуте, решил не заморачиваться и запускать его sudo.

Но при работе скрипта из консоли начала вываливаться ошибка кодека на кириллические символы (видимо, из-за sys.getdefaultencoding() ‘ascii’ ) Решил это:

reload(sys)
sys.setdefaultencoding('utf-8')

Переименую скрипт в “SkladKostiley.py”, всем спасибо!
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