我一直在用django和elementtree开发一个应用程序,在将它部署到生产服务器时,我发现它运行的是python 2.4。我已经能够捆绑elementtree但现在我收到了错误:
"No module named expat; use SimpleXMLTreeBuilder instead"
不幸的是我无法升级python所以我坚持我得到的东西。我如何使用SimpleXMLTreeBuilder作为解析器和/或我需要重写代码?
答案 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
包之后解决了这个问题。
看看上面的解决方案是否能给你任何想法。