5

py2exe 用の setup.py スクリプトを作成し、Python GUI アプリケーション用の実行可能ファイルを生成しました。アプリ、w9xopen.exe、MSVCR71.dll を含む多数のファイルが dist ディレクトリにあります。アプリケーションを実行しようとすると、「詳細についてはログファイルを参照してください」というエラー メッセージが表示されます。唯一の問題は、ログ ファイルが空であることです。

私が見た最も近いエラーは「次のモジュールが欠落しているようです」ですが、私が知る限り、これらのモジュールは使用していません (特に、使用していないデータベースのものであるように思われるため)。 Google では、これらは比較的無害な警告であることを示唆しています。

コンソール アプリケーションと wxpython を py2exe で作成してパッケージ化し、両方のアプリケーションをコンパイルして正常に実行しました。私はdaboと呼ばれる新しいpythonツールキットを使用しています.daboはwxpythonモジュールを使用しているため、何が間違っているのかわかりません。明らかにログ ファイルがあまり役に立たないので、どこから問題の調査を開始すればよいでしょうか?

編集1: Python のバージョンは 2.5 です。py2exe は 0.6.8 です。重大なビルド エラーはありませんでした。リストされたパッケージは私が絶対に使用していないものであり、アプリの実行を停止するべきではないため、「次のモジュールが欠落しているようです...」というビットだけでした。実行可能ファイルを実行すると、完全に空のログファイルが作成されました。以前は、私が修正したロケールに関するエラーがありましたが、実行可能ファイルが実行されていなかったため、明らかに何かが間違っていました。setup.py ファイルは、「アプリ ウィザード」を実行して生成された元の setup.py にかなり大きく基づいており、Ed Leafe と他の人が投稿した例を参照しています。はい、ログ ファイルがありますが、使用するものが何も出力されていません。

必要最小限の GUI (いくつかのデフォルト メニュー オプションを備えた空のフレーム) を単純に生成する必要最小限のテスト アプリケーションを作成しました。コード自体はわずか 3 行で、残りはサードパーティのツールキットに含まれています。繰り返しますが、それは(元のアプリと同様に)exeにコンパイルされましたが、単に実行されませんでした。ランタイム ログ ファイルにもエラー出力はありませんでした。

編集 2: 最初のデバッグ目的で「ウィンドウ」から「コンソール」に切り替えることは洞察に満ちていることがわかりました。これで、基本的な実行テスト アプリが完成し、実際のアプリをコンパイルできるようになりました。

テストアプリ:

輸入ダボ
アプリ = dabo.dApp()
app.start()

テストアプリの setup.py:

OS のインポート
システムをインポート
輸入グロブ
distutils.core インポート設定から
py2exeをインポート
dabo.icons のインポート
daboDir = os.path.split(dabo.__file__)[0]

# dabo アイコンの場所を見つけます。
iconDir = os.path.split(dabo.icons.__file__)[0]
iconSubDirs = []
def getIconSubDir(arg, dirname, fnames):
    ".svn" が dirname および dirname[-1] にない場合 != "\\":
        アイコン = glob.glob(os.path.join(dirname, "*.png"))
        アイコンの場合:
            subdir = (os.path.join("リソース", dirname[len(arg)+1:]), アイコン)
            iconSubDirs.append(サブディレクトリ)
os.path.walk(iconDir、getIconSubDir、iconDir)

# ロケール:
localeDir = "%s%slocale" % (daboDir, os.sep)
ロケール = []
def getLocales (arg、dirname、fnames):
  ".svn" が dirname および dirname[-1] にない場合 != "\\":
    mo_files = tuple(glob.glob(os.path.join(dirname, "*.mo")))
    mo_files の場合:
      subdir = os.path.join("dabo.locale", dirname[len(arg)+1:])
      locales.append((サブディレクトリ, mo_files))
os.path.walk(localeDir, getLocales, localeDir)

data_files=[("リソース", glob.glob(os.path.join(iconDir, "*.ico"))),
        ("リソース", glob.glob("リソース/*"))]
data_files.extend(iconSubDirs)
data_files.extend(ロケール)

setup(name="basicApp",
        バージョン='0.01',
        description="Dabo アプリケーションのテスト",
        options={"py2exe": {
                「圧縮」: 1、「最適化」: 2、「bundle_files」: 1、
                "除外": ["Tkconstants","Tkinter","tcl",
                "_imagingtk", "PIL._imagingtk",
                "ImageTk"、"PIL.ImageTk"、"FixTk"、"kinterbasdb"、
                「MySQLdb」、「数値」、「OpenGL.GL」、「OpenGL.GLUT」、
                'dbGadfly', 'email.Generator',
                「email.Iterators」、「email.Utils」、「kinterbasdb」、
                'numarray', 'pymssql', 'pysqlite2', 'wx.BitmapFromImage'],
                "includes": ["encodings", "locale", "wx.gizmos","wx.lib.calendar"]}},
        zipfile=なし、
        windows=[{'script':'basicApp.py'}],
        data_files=データファイル
)
4

2 に答える 2

1

最初にログ処理を修正する必要がある場合があります。このURLが役立つ場合があります。

後でここで答えを探すことができます。

これ以上具体的な情報(py2exe / pythonバージョン、py2exeログ、その他の使用済みサードパーティライブラリなど)を提供しなかったため、私の答えは非常に一般的です。

于 2008-10-20T12:33:37.567 に答える
1

wxPyton のクラス初期化子については、 http: //www.wxpython.org/docs/api/wx.App-class.htmlを参照してください。Appコンソールからアプリを実行し、そこに stderr を出力する場合Falseは、redirect引数を指定します。そうではなく、単にウィンドウをポップアップさせたい場合は、とをに設定redirectします。TruefilenameNone

于 2008-10-20T13:31:21.757 に答える