Domanda

ho sviluppato un'applicazione con Django e elementtree e mentre la distribuzione al server di produzione che ho scoperto è in esecuzione Python 2.4. Sono stato in grado di riunire elementtree ma ora sto ottenendo l'errore:

"No module named expat; use SimpleXMLTreeBuilder instead"

Purtroppo non posso aggiornare python così im bloccati con quello che ho ottenuto. Come si usa SimpleXMLTreeBuilder come il parser e / o avrò bisogno di riscrivere il codice?

È stato utile?

Soluzione

Se si dispone di modulo di terze parti che vuole usare ElementTree (e XMLTreeBuilder da dipendenza) è possibile modificare la definizione di XMLTreeBuilder ElementTree a quello fornito da SimpleXMLTreeBuilder in questo modo:

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

Ora ElementTree utilizzerà sempre l'SimpleXMLTreeBuilder ogni volta che si chiama.

Si veda anche: http://groups.google.com/group / google-appengine / browse_thread / thread / b7399a91c9525c97

Altri suggerimenti

Ci siamo imbattuti in questo stesso problema utilizzando Python versione 2.6.4 su CentOS 5.5.

Il problema si verifica quando la classe expat tenta di caricare i moduli pyexpat, vedere /usr/lib64/python2.6/xml/parsers/expat.py

Guardando all'interno di /usr/lib64/python2.6/lib-dynload/, non ho visto il "pyexpat.so" oggetto condiviso. Tuttavia, I ha lo vedono su un'altra macchina, che non stava avendo il problema.

Ho confrontato le versioni di Python (yum list 'python *') e identificato che la macchina ben funzionante aveva pitone 2.6.5. Esecuzione 'aggiornamento Python26 yum' risolto il problema per me.

Se questo non funziona per voi e si desidera una soluzione slapstick, è possibile copiare il file in modo nel vostro percorso di carico dinamico.

Supponendo che si sta ora utilizzando elementtree.XMLTreeBuilder, basta provare questo, invece:

from elementtree import SimpleXMLTreeBuilder as XMLTreeBuilder

Si cerca di fornire esattamente le stesse funzionalità ma utilizzando xmllib invece di expat. Se anche questo non funziona, BTW, provare:

from elementtree import SgmlopXMLTreeBuilder as XMLTreeBuilder

per tentare di utilizzare un'altra applicazione, questa volta sulla base di sgmlop invece.

  

da elementtree SimpleXMLTreeBuilder importazione come XMLTreeBuilder

Ok, è un po 'cambiato ora:

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

Credo che sia stato staticamente collegato con la versione precedente di Python o qualcosa del genere. C'è un modo semplice per collegare parser XML per Python 2.6? Alcune librerie sembrano lavorare solo con le versioni precedenti 8 (

Ho lo stesso errore come quando ho sviluppato su Solaris & python 2.7.2. Ho risolto questo problema dopo aver installato il pacchetto python expat utilizzando pkgin. Vedere se la soluzione di cui sopra può dare qualche idea.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top