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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top