2015-10-12 4 views
3
>>> import lxml 
>>> from lxml import etree 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: /usr/local/lib/python3.4/site-packages/lxml/etree.cpython-34m.so: undefined symbol: __xmlStructuredErrorContext 

я есть libxml2 и LibXSLT, я попытался удалить и переустановить тоже, это не помогло. версия LXML: 3.4.4, питон: 3.4.2, ОС: RHEL 5.5 Пожалуйста, помогите решить эту проблему«неопределенный символ: __xmlStructuredErrorContext» импортирования etree из LXML

Благодарности

+0

Это не просто вопрос их наличия, вы должны иметь те же версии, с которыми была скомпилирована общая библиотека. –

+0

Кстати, хотя ответ, заданный Regis, не устраняет вашу непосредственную проблему здесь, это * лучшая практика для использования (поскольку он непосредственно импортирует модуль 'etree', а не импортирует модуль' lxml', а затем разрешает его ссылку «etree»). –

+0

Кстати, вы можете найти http://stackoverflow.com/questions/26488797/failed-to-linked-symbol-in-so-file-while-the-symbol-exists, представляющий интерес. –

ответ

3

Ваша версия lxml.etree был составлен против другой версии libxml2, чем один вы действительно установили. Переустановка libxml2 не помогает, потому что вы просто переустанавливаете один и тот же код. Повторная установка двоичных файлов, которые связывают ваш существующий двоичный файл etree.cpython-34m.so, также не будет работать, потому что сам этот бинар по своей сути поврежден (it refers to a symbol that isn't exported in all versions of libxml2).

Удалите модуль Python - не библиотеку C - и переустановите его из источника. (pip должен иметь возможность сделать это автоматически, предполагая, что у вас есть -devel заголовки для libxml2 и libxslt и соответствующий компилятор).

+0

Спасибо, Чарлз, но я установил lxml, используя pip. и как я вижу, как скомпилирована общая библиотека? –

+0

Вы можете использовать 'ldd' для поиска библиотеки libxml2, используемой соответствующим файлом .so (убедитесь, что в среде нет переменной' LD_LIBRARY_PATH', когда ваш код вызывается во время выполнения переопределения с другим местоположением) и 'nm 'посмотреть на символы, которые он содержит. –

+0

Спасибо Чарльз, я прошел через ссылку, и я сделал то же самое, и вот моя ошибка '[root @ qos-ucs1 lib] # nm libxml2.so.2 | grep __xmlStructuredErrorContext 00000000000a2750 T __xmlStructuredErrorContext' –

Смежные вопросы