2009-07-01 4 views
4

Я разрабатываю приложение с django и elementtree, а при его развертывании на производственный сервер я обнаружил, что он запускает python 2.4. Я был в состоянии связать ElementTree, но теперь я получаю сообщение об ошибке:Использование SimpleXMLTreeBuilder в elementtree

"No module named expat; use SimpleXMLTreeBuilder instead" 

К сожалению, я не могу обновить питона так им застрял с тем, что я получил. Как использовать SimpleXMLTreeBuilder в качестве синтаксического анализатора и/или мне нужно будет переписать код?

ответ

6

Если у вас есть модуль третьей стороны, которая хочет использовать ElementTree (и XMLTreeBuilder по зависимости), вы можете изменить определение XMLTreeBuilder ElementTree к тому, предоставленной SimpleXMLTreeBuilder как так:

from xml.etree import ElementTree # part of python distribution 
from elementtree import SimpleXMLTreeBuilder # part of your codebase 
ElementTree.XMLTreeBuilder = SimpleXMLTreeBuilder.TreeBuilder 

Теперь ElementTree всегда будет использовать SimpleXMLTreeBuilder всякий раз, когда это называется

См. также: http://groups.google.com/group/google-appengine/browse_thread/thread/b7399a91c9525c97

+1

У меня есть следующее предупреждение, использующее ваше решение: Устаревшее предупреждение: модуль xmllib устарел. Вместо этого используйте xml.sax. Любые мысли, как это исправить? – Alex

0

Предполагая, что вы в настоящее время используют elementtree.XMLTreeBuilder, попробуйте вместо этого:

from elementtree import SimpleXMLTreeBuilder as XMLTreeBuilder 

Он пытается обеспечить точно такую ​​же функциональность, но используя xmllib вместо эмигранта. Если это также не удается, КСТАТИ, попробуйте:

from elementtree import SgmlopXMLTreeBuilder as XMLTreeBuilder 

пытаться использовать еще одну реализацию, этот основанный на sgmlop вместо этого.

0

from elementtree import SimpleXMLTreeBuilder as XMLTreeBuilder

Хорошо, она немного изменилась:

Traceback (most recent call last): 
    File "C:\Python26\tests\xml.py", line 12, in <module> 
    doc = elementtree.ElementTree.parse("foo.xml") 
    File "C:\Python26\lib\site-packages\elementtree\ElementTree.py", line 908, in parse 
    tree = parser_api.parse(source) 
    File "C:\Python26\lib\site-packages\elementtree\ElementTree.py", line 169, in parse 
    parser = XMLTreeBuilder() 
    File "C:\Python26\lib\site-packages\elementtree\ElementTree.py", line 1165, in __init__ 
    "No module named expat; use SimpleXMLTreeBuilder instead" 
ImportError: No module named expat; use SimpleXMLTreeBuilder instead 

Я думаю, что это был статически связан с более старой версией Python или что-то. Есть ли простой способ связать синтаксический анализатор XML с Python 2.6? Некоторые библиотеки, кажется, работают только с более старыми версиями 8 (

1

Мы столкнулись с этой же проблемой, с помощью питона версии 2 .6.4 на CentOS 5.5.

Проблема происходит, когда класс эмигрант пытается загрузить модули pyexpat см /usr/lib64/python2.6/xml/parsers/expat.py

Глядя внутрь /usr/lib64/python2.6/lib-dynload /, я не видел общий объект «pyexpat.so». Тем не менее, я сделал на другом компьютере, в котором не было проблемы.

Я сравнивал версии python (yum list 'python *') и обнаружил, что у правильно функционирующей машины был python 2.6.5. Запуск «yum update python26» исправил проблему для меня.

Если это не сработает для вас, и вы хотите получить решение по slapstick, вы можете скопировать SO-файл в путь динамической загрузки.

0

У меня такая же ошибка, как и при разработке на Solaris & python 2.7.2. Я исправил эту проблему после того, как установил пакет python expat с помощью pkgin. Посмотрите, может ли приведенное выше решение дать вам какие-либо идеи.

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

  • Нет связанных вопросов^_^