我一直在用 django 和 elementtree 开发一个应用程序,在将它部署到生产服务器时,我发现它正在运行 python 2.4。我已经能够捆绑 elementtree 但现在我收到错误:
"No module named expat; use SimpleXMLTreeBuilder instead"
不幸的是,我无法升级 python,所以我坚持我所得到的。我如何使用 SimpleXMLTreeBuilder 作为解析器和/或我是否需要重写代码?
我一直在用 django 和 elementtree 开发一个应用程序,在将它部署到生产服务器时,我发现它正在运行 python 2.4。我已经能够捆绑 elementtree 但现在我收到错误:
"No module named expat; use SimpleXMLTreeBuilder instead"
不幸的是,我无法升级 python,所以我坚持我所得到的。我如何使用 SimpleXMLTreeBuilder 作为解析器和/或我是否需要重写代码?
如果您有第三方模块想要使用 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
我们在 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 文件复制到您的动态加载路径中。
假设您现在正在使用elementtree.XMLTreeBuilder
,请尝试以下操作:
from elementtree import SimpleXMLTreeBuilder as XMLTreeBuilder
它试图提供完全相同的功能,但使用 xmllib 而不是 expat。如果这也失败了,顺便说一句,请尝试:
from elementtree import SgmlopXMLTreeBuilder as XMLTreeBuilder
尝试使用另一种实现,这个基于 sgmlop 的实现。
从元素树导入 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(
当我在 Solaris & python 2.7.2 上开发时,我遇到了和你一样的错误。我在expat
使用 pkgin 安装了 python 包后解决了这个问题。看看上面的解决方案是否能给你任何想法。