在elemen中使用SimpleXMLTreeBuilder

2024-06-06 12:47:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

"No module named expat; use SimpleXMLTreeBuilder instead"

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


Tags: djangono代码应用程序解析器use部署错误
3条回答

我们在CentOS 5.5上使用python version 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”为我修复了该问题。

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

假设您现在正在使用elementtree.XMLTreeBuilder,请改为尝试以下操作:

from elementtree import SimpleXMLTreeBuilder as XMLTreeBuilder

它试图提供完全相同的功能,但使用xmllib而不是expat。如果同样失败,顺便说一句,试试:

from elementtree import SgmlopXMLTreeBuilder as XMLTreeBuilder

为了尝试使用另一个实现,这个实现基于sgmlop。

如果您有第三方模块想要使用ElementTree(和XMLTreeBuilder by dependency),那么可以将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

相关问题 更多 >