Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在elementtree中使用SimpleXMLTreeBuilder_Python_Django_Elementtree - Fatal编程技术网

Python 在elementtree中使用SimpleXMLTreeBuilder

Python 在elementtree中使用SimpleXMLTreeBuilder,python,django,elementtree,Python,Django,Elementtree,我一直在用django和elementtree开发一个应用程序,在将其部署到生产服务器时,我发现它运行的是Python2.4。我已经能够捆绑elementtree,但现在我得到了错误: "No module named expat; use SimpleXMLTreeBuilder instead" 不幸的是,我不能升级python,所以我只能使用我得到的。如何使用SimpleXMLTreeBuilder作为解析器和/或是否需要重写代码?假设您现在使用的是elementtree.XMLTree

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

"No module named expat; use SimpleXMLTreeBuilder instead"

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

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

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

from elementtree import SgmlopXMLTreeBuilder as XMLTreeBuilder
为了尝试使用另一个实现,这个实现取而代之的是基于sgmlop的

从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
回溯(最近一次呼叫最后一次):
文件“C:\Python26\tests\xml.py”,第12行,在
doc=elementtree.elementtree.parse(“foo.xml”)
文件“C:\Python26\lib\site packages\elementtree\elementtree.py”,第908行,在parse中
tree=parser\u api.parse(源)
文件“C:\Python26\lib\site packages\elementtree\elementtree.py”,第169行,在parse中
parser=XMLTreeBuilder()
文件“C:\Python26\lib\site packages\elementtree\elementtree.py”,第1165行,在\uuu init中__
“没有名为expat的模块;请改用SimpleXMLTreeBuilder”
ImportError:没有名为expat的模块;改用SimpleXMLTreeBuilder

我认为它与Python的旧版本或其他东西有静态链接。有没有一种简单的方法可以将XML解析器附加到Python2.6上?有些库似乎只适用于旧版本8(

如果您有第三方模块想要使用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


另请参见:

我们在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文件复制到动态加载路径中。

我在Solaris和python 2.7.2上开发时遇到了与您相同的错误。 在使用pkgin安装python
expat
包之后,我修复了这个问题。
看看上面的解决方案是否能给您一些建议。

我在使用您的解决方案时收到了以下警告:弃用警告:xmllib模块已过时。请改用xml.sax。有什么想法如何修复它吗?