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

CentOS5.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 *')を比較し、正しく機能しているマシンにpython2.6.5があることを確認しました。'yum update python26'を実行すると、問題が修正されました。

それがうまくいかず、どたばた喜劇の解決策が必要な場合は、SOファイルを動的ロードパスにコピーできます。

于 2012-04-19T20:05:48.347 に答える
0

現在 を使用していると仮定してelementtree.XMLTreeBuilder、代わりにこれを試してください:

from elementtree import SimpleXMLTreeBuilder as XMLTreeBuilder

まったく同じ機能を提供しようとしますが、expat の代わりに xmllib を使用します。それも失敗する場合は、ところで、試してください:

from elementtree import SgmlopXMLTreeBuilder as XMLTreeBuilder

さらに別の実装を使用しようとすると、代わりに sgmlop に基づいたものになります。

于 2009-07-01T14:27:22.940 に答える