Mit SimpleXMLTreeBuilder in elementtree
-
21-08-2019 - |
Frage
Ich habe eine Anwendung mit django und elementtree entwickelt und während es auf den Produktionsserver bereitstellen habe ich herausgefunden, es Python 2.4 läuft. Ich konnte elementtree bündeln, aber jetzt bin ich immer die Fehlermeldung:
"No module named expat; use SimpleXMLTreeBuilder instead"
Leider kann ich nicht Python Upgrade so stecken im mit dem, was ich habe. Wie verwende ich SimpleXMLTreeBuilder als Parser und / oder werde ich brauche Code neu zu schreiben?
Lösung
Wenn Sie Dritter Modul haben, das will ElementTree (und XMLTreeBuilder durch Abhängigkeit) verwenden Sie können ElementTree des XMLTreeBuilder Definition des von SimpleXMLTreeBuilder vorgesehen ändern wie folgt:
from xml.etree import ElementTree # part of python distribution
from elementtree import SimpleXMLTreeBuilder # part of your codebase
ElementTree.XMLTreeBuilder = SimpleXMLTreeBuilder.TreeBuilder
Jetzt ElementTree immer die SimpleXMLTreeBuilder verwenden, wann immer es genannt wird.
Siehe auch: http://groups.google.com/group / google-appengine / browse_thread / thread / b7399a91c9525c97
Andere Tipps
Wir liefen in das gleiche Problem mit Python-Version 2.6.4 auf CentOS 5.5.
Das Problem tritt auf, wenn die Expat-Klasse versucht, die pyexpat Module zu laden, siehe /usr/lib64/python2.6/xml/parsers/expat.py
innerhalb von /usr/lib64/python2.6/lib-dynload/ Sehen, habe ich nicht das „pyexpat.so“ gemeinsam genutztes Objekt sehen. Allerdings I haben es auf einer anderen Maschine sehen, das war nicht das Problem ist.
vergleichen ich die Python-Versionen (yum list 'Python *') und festgestellt, dass die gut funktionierende Maschine hatte Python 2.6.5. 'Yum update python26' läuft das Problem behoben für mich.
Wenn das nicht für Sie arbeitet und Sie eine Slapstick-Lösung wollen, können Sie kopieren die SO in der dynamischen Lastpfad-Datei.
Angenommen, Sie sind jetzt elementtree.XMLTreeBuilder
verwenden, versuchen Sie nur diese statt:
from elementtree import SimpleXMLTreeBuilder as XMLTreeBuilder
Es wird versucht, genau die gleiche Funktionalität zu bieten, sondern von Expats mit xmllib. Wenn das auch nicht, BTW, versuchen Sie:
from elementtree import SgmlopXMLTreeBuilder as XMLTreeBuilder
versuchen, noch eine weitere Implementierung zu verwenden, um dieses eine basierend auf sgmlop statt.
von elementtree Import SimpleXMLTreeBuilder als XMLTreeBuilder
Ok, es ist leicht verändert nun:
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
Ich denke, es ist statisch mit älterer Version von Python oder etwas verlinkt. Gibt es eine einfache Möglichkeit, XML-Parser zu Python 2.6 zu befestigen? Einige Bibliotheken scheinen nur die Arbeit mit älteren Versionen 8 (
Ich habe denselben Fehler wie Sie, wenn ich auf Solaris entwickelt und Python 2.7.2.
Ich reparierte dieses Problem, nachdem ich das Python expat
Paket mithilfe pkgin installiert.
Prüfen Sie, ob die Lösung oben können Sie eine Idee.