6

Python で GTK アプリケーションを作成しました。

すべてのグラフィカル ユーザー インターフェイスはグレード ファイルにあり、いくつかの画像が使用されています。アプリケーションを実行可能ファイルにコンパイルしたいと考えています。そのために、PyInstallerコンパイラとUPXパッカーを使用しています。

私はマニュアルが言うようにやった:

python Configure.py
python Makespec.py --onefile --windowed --upx /path/to/yourscript.py
python Build.py /path/to/yourscript.spec

PyInstaller は完全に機能し、1 つの exe ファイルを作成します。しかし、アプリケーションを正しく動作させるには、グレード ファイルとイメージ ファイルを exe のフォルダーにコピーする必要あります

これらのファイルを実行可能ファイルにコンパイルする方法はありますか?

スペック ファイルをさまざまな方法で編集しましたが、目的を達成できません。以下の仕様ファイルは、ファイルをディレクトリにコピーするだけで、実行可能ファイルにコンパイルしません

# -*- mode: python -*-
a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'r:\\connection\\main.py'],
             pathex=['C:\\Documents and Settings\\Lixas\\Desktop\\pyinstaller-1.5-rc1'])

pyz = PYZ(a.pure)

exe = EXE( pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name=os.path.join('dist', 'NetworkChecker.exe'),
          debug=False,
          strip=False,
          upx=True,
          console=False,
          icon='r:\\connection\\ikona.ico'        )

coll = COLLECT(
    exe,
    [('gui.glade', 'r:\\connection\\gui.glade', 'DATA')],
    [('question16.png', 'r:\\connection\\question16.png', 'DATA')],
#   a.binaries,
#   strip=False,
    upx=True,
    name='distFinal')

すべてが含まれている実行可能ファイルを 1 つだけにしたい

4

3 に答える 3

6

PyInstallerを使用すると、データ ファイルを .py ファイルに変換する手間をかけに、すべてのリソースを exe にバンドルできます。COLLECT オブジェクトは正しいようです。トリッキーな手順は、実行時にこれらのファイルにアクセスすることです。PyInstaller はそれらを一時ディレクトリに解凍し、_MEIPASS2 変数でそれらがどこにあるかを教えてくれます。開発モードとパック モードの両方でファイル パスを取得するには、次のようにします。

def resource_path(relative):
    return os.path.join(
        os.environ.get(
            "_MEIPASS2",
            os.path.abspath(".")
        ),
        relative
    )


# in development
>>> resource_path("gui.glade")
"/home/shish/src/my_app/gui.glade"

# in deployment
>>> resource_path("gui.glade")
"/tmp/_MEI34121/gui.glade"
于 2011-10-06T13:52:54.437 に答える
6

少し変更するだけで、すべてをソース コードに組み込み、実行可能ファイルに組み込むことができます。

画像ファイルに対して実行するgdk-pixbuf-csource場合は、それらを文字列に変換し、gtk.gdk.pixbuf_new_from_inline().

Glade ファイルを文字列としてプログラムに含め、gtk.Builder.add_from_string().

于 2011-07-14T11:31:01.610 に答える
1

これらのファイルを実行可能ファイルにコンパイルする方法はありますか?

厳密に言えば、いいえ、ソース コードをコンパイルするため、グレード ファイルは XML であり、画像はバイナリ データです。通常行うことは、インストーラー (つまり、インストーラーの実行時にさまざまなファイルを正しいディレクトリに配置する自己解凍型アーカイブ) を作成することです。

編集:あなたの懸念が単に1つのファイルの実行可能ファイルを持つことである場合(つまり、「コンパイル」ではなく、実際にはファイルシステムに永続的に書き込まれるファイルの数に関するものです) 、 py2exeに基づいてこのスクリプトを使用してみてください。プログラムが実行されるたびに一時ファイルを作成し、実行が完了するとそれらを削除します。

EDIT2:どうやら、あなたが求めていることはPyInstallerの下でも可能です。ドキュメントから:

デフォルトでは、pyinstaller.py はメインの実行可能ファイルと動的ライブラリを含む配布ディレクトリを作成します。オプション --onefile は、PyInstaller がすべてを含む単一のファイルをビルドするように指定します。

于 2011-07-14T07:46:43.143 に答える