在elementtree中使用SimpleXMLTreeBuilder

时间:2009-07-01 11:02:52

标签: python django elementtree

我一直在用django和elementtree开发一个应用程序,在将它部署到生产服务器时,我发现它运行的是python 2.4。我已经能够捆绑elementtree但现在我收到了错误:

"No module named expat; use SimpleXMLTreeBuilder instead"

不幸的是我无法升级python所以我坚持我得到的东西。我如何使用SimpleXMLTreeBuilder作为解析器和/或我需要重写代码?

5 个答案:

答案 0 :(得分:7)

如果您有第三方模块想要使用ElementTree(和依赖XMLTreeBuilder),您可以将ElementTree的XMLTreeBuilder定义更改为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 :(得分:1)

我们在CentOS 5.5上使用python 2.6.4版遇到了同样的问题。

当expat类尝试加载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'为我解决了这个问题。

如果这对您不起作用并且您想要一个闹剧解决方案,则可以将SO文件复制到动态加载路径中。

答案 2 :(得分:0)

假设您现在正在使用elementtree.XMLTreeBuilder,请尝试使用此选项:

from elementtree import SimpleXMLTreeBuilder as XMLTreeBuilder

它尝试提供完全相同的功能,但使用xmllib而不是expat。如果这也失败了,顺便说一下,试试:

from elementtree import SgmlopXMLTreeBuilder as XMLTreeBuilder

试图使用另一个实现,这个实现基于sgmlop而不是。

答案 3 :(得分:0)

  

从elementtree导入SimpleXMLTreeBuilder作为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(

答案 4 :(得分:0)

我在Solaris和Solaris上开发时遇到了同样的错误。 python 2.7.2。 我使用pkgin安装了python expat包之后解决了这个问题。 看看上面的解决方案是否能给你任何想法。