2

Pythonの組み込みxml.etree.ElementTreeクラスを使用していくつかのxmlデータを使用するアプリを構築しようとしています。コマンドラインから実行すると正常に動作しますが、ビルドすると「ImportError:Nomoduleetree.ElementTree」というエラーが発生します。これは、そのモジュールを正しくインポートしていないためだと思いますが、その方法を理解できていません。「includes」または「packages」ディレクティブを使用すると、py2appは同じエラーで文句を言います。特に、package_dir(/ System / Library / ...)を指定すると、コンパイルされますが、それでもエラーが発生します。問題を説明するための短い例を含めました。

macxml.py

from xml.etree.ElementTree import ElementTree

if __name__ == '__main__':
    tree = ElementTree()
    print tree.parse('lib.xml')

これにより、「<Element Library atxxxxxx>」が出力されます。ここで、Libraryはルート名です。

setup.py

from setuptools import setup

setup(name="Mac XML Test",
      app=['macxml.py'],
     )

Macアプリにこのライブラリを利用させる正しい方法は何ですか?

Python 2.6.4

Mac OS X 10.6.2

編集:Python 2.6.2を搭載した別のMac(PPC 10.5.8)でもこれを試し、同じ結果を達成しました。

4

3 に答える 3

1

macholib、modulegraph、py2app、および setuptools を再インストールして更新した後、役に立たなかったので、もう少し掘り下げて、modulegraph モジュールで次のエラーを見つけました。

graphmodule.find_modules.find_modules(includes=['xml.etree'])
Traceback (most recent call last):
    File "<stdin>", line 1 in <module>
    File ".../modulegraph/find_modules.py", line 255 in find_modules
    File ".../modulegraph/find_modules.py", line 182 in find_needed_modules
    File ".../modulegraph/modulegraph.py", line 401 in import_hook
    File ".../modulegraph/modulegraph.py", line 464 in load_tail
ImportError: No module named xml.etree

load_tailそのため、関数と関数を詳しく調べたimport_hookところ、何らかの理由で xml パッケージを正しくインポートしていたことがわかりましたが、_xmlplus の古いインストールに移動して、etree サブパッケージを探しました (もちろん見つかりませんでした)。_xmlplus パッケージを削除するとエラーが解消され、次の setup.py ファイルでアプリケーションを動作させることができました。

from setuptools import setup
import xml.etree.ElementTree

setup(name="Mac XML Test",
      app=['macxml.py'],
      options={'py2app': {'includes': ['xml.etree.ElementTree']}},
      data_files=[('', ['lib.xml'])]
     )

出力はコンソールに表示されます。

于 2010-02-02T14:28:58.477 に答える
1

コメントの形式がよくないので、

find_modules.py で変更しました

REPLACEPACKAGES = {
    '_xmlplus':     'xml',
}

REPLACEPACKAGES = {
    #'_xmlplus':     'xml',
}

そしてxmlのインポートはうまくいきました。

于 2011-01-07T16:57:56.873 に答える
0

macports (または fink など) をpy2app使用している場合は、正しいインタープリターを使用していることを確認してください。2.6.x を使用するには、新しいバージョンをインストールする必要がある場合があります (OS X 10.5py2appでは 2.4.x を使用します)。

それでもうまくいかない場合、パスの問題を解決するための私の手順は次のとおりです。

  1. コード (または) が使用する python インタープリターを起動します (py2app本当に確実ですか?? 試してみてくださいwhich python) 。
  2. import sys; print sys.path

ステップ 2. で/System/Library..someotherpythonversionコード内のパスが得られた場合、間違ったインタープリターで実行されています。

于 2010-02-01T19:12:45.780 に答える