6

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

"No module named expat; use SimpleXMLTreeBuilder instead"

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

4

5 回答 5

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

于 2010-01-14T19:59:21.593 回答
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 文件复制到您的动态加载路径中。

于 2012-04-19T20:05:48.347 回答
0

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

from elementtree import SimpleXMLTreeBuilder as XMLTreeBuilder

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

from elementtree import SgmlopXMLTreeBuilder as XMLTreeBuilder

尝试使用另一种实现,这个基于 sgmlop 的实现。

于 2009-07-01T14:27:22.940 回答
0

从元素树导入 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(

于 2009-07-01T17:03:08.010 回答
0

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

于 2013-12-09T03:17:43.563 回答