0

私は、pyinstaller を使用してデータファイル (png ファイルと pot ファイル) をロードする必要があるアプリケーションに取り組んでおり、一時フォルダーのファイルを追跡してきましたが、何らかの理由でデータファイルが一時フォルダーに追加されません。次のようなディレクトリを追跡するための小さなモジュールを作成しました。

 import os, sys

 def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    try:
        # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

スペックファイルも変更しました:

a = Analysis(['mks_controller.py'],
             pathex=['C:\\pyinstaller-2.0\\pyinstaller-2.0'],
             hiddenimports=[],
             hookspath=None)
a.datas += [('presentation.potx','C:\\pyinstaller-2.0\\pyinstaller-2.0\\bbpresentation.potx','DATA'),('splat.png','C:\\pyinstaller-2.0\\pyinstaller-2.0\\splat.png', 'DATA'),('logo.png','C:\\pyinstaller-2.0\\pyinstaller-2.0\\logo.png','DATA')]
pyz = PYZ(a.pure)

次の 2 つのコマンドを使用して exe をビルドしました。

pyinstaller.py --onefile filename.py 
pyinstaller.py --onefile filename.spec

データファイルがディレクトリにロードされていません。また、このディレクトリにあるすべてのファイルを示すログを実行しようとしましたが、データファイルは表示されません。そのスクリーンショットを次に示します。

http://imgur.com/delete/qIff0zZT2Y4ZdKT

私はpython 2.7とpyinstaller 2.0を使用しています。問題が何であるか誰にも分かりますか?前もって感謝します!

4

1 に答える 1

0

最近学習曲線を通過した初心者からのいくつかの提案。エラーが発生する可能性があるものはたくさんあります。最初に、データファイルを含めずにexeを動作させます...

1) Windows を使用していますか? コマンドを実行するためのバッチファイルを作成し(機能するまで何百回も実行したようです)、「一時停止」するとウィンドウが開いたままになり、エラーメッセージが表示されます。

pyinstaller.py --onedir filename.py
pause

2) --onedir を使用しました。とにかく、1 つのファイルですべてのリソースを解凍するのに時間がかかるため、テスト中に時間が無駄になります。テスト用にすべてのデータ ファイルをドライブ上の別のディレクトリに置き、プログラムで絶対パスを使用しました。その後、これらを手動で dist ディレクトリに含め、それに応じて相対パスをプログラムに設定することができます。仕様ファイルを編集してすべてを 1 つのファイルにまとめる前に、他のエラーに対処してください。

3) データファイルを含めなかったので、スペックファイルの編集について心配しませんでした!

4)バッチファイルを介して実行可能ファイルも実行しました(私は初心者で、何度も実行する必要があったため)、再び「一時停止」コマンドを使用して、ウィンドウを開いたままにし、エラーを読み取ることができます。

5) 最後に、エラーを修正するために、最新の pyinstaller 開発コードに切り替える必要がありました(「pythoncom」エラーを修正しました)。開発コードは、「警告」が少ないため、デバッグに役立つようです。また、モジュール (私の場合は pyproj) を最新のビルドに更新する必要がありました。インストールしたモジュールのエラーを修正するために最初に行うことは、モジュールを更新することです。さまざまなモジュールのメンテナーは、おそらく pyinstaller で発生している問題を認識しており、それらに対処している可能性があります。

于 2013-06-27T05:17:49.770 に答える