3

私も、データファイルを含む単純な --onefile exe を初めて構築しようとしていますが、.exe の構築時に Pyinstaller がそれらを見つけられないようです。--onedir ビルドは問題なく動作するようです。

この時点でも --debug スイッチを使用しています。onefile 実行可能ファイルを実行でき、動作を開始しているように見えます。プログラムは (sys._MEIPASS) 一時ディレクトリを正常に検出します (必要なディレクトリ名を指示どおりに出力します) が、一時ディレクトリから最初のデータ ファイルを探すときに「そのようなファイルまたはディレクトリはありません」というエラーを報告します。.exe で archiveviewer.py を使用しましたが、そこに必要なデータ ファイルが見つかりませんでした。これが問題のようですが、理由がわかりません。ビルド用のデータ ファイルは、spec ファイルに記述されているディレクトリにあります。私の完全な仕様ファイルは

# -*- mode: python -*-

a = Analysis(['develop6.py'],
         pathex=['C:\\PYINST20'],
         hiddenimports=[],
         hookspath=None)

a.datas += [ ('conlist.txt', 'C:\\pyinst20\\conlist.txt', 'DATA'), ('imageblank.gif', 'C:\\pyinst20\\imageblank.gif', 'DATA')]

pyz = PYZ(a.pure)

exe = EXE(pyz,
      a.scripts,
      a.binaries,
      a.zipfiles,
      a.datas,
      name=os.path.join('dist', 'develop6.exe'),
      debug=True,
      strip=None,
      upx=True,
      console=True )
4

5 に答える 5

0

私は問題を発見したと信じており、仕様ファイルの本体とは関係ありません。spec ファイルを使用して pyinstaller を実行すると、コマンド ライン構文が間違っていたようです。適切に実行した場合:

pyinstaller.py [options] <my_specfile.spec>

動作するように見えます。

于 2013-01-13T23:43:26.613 に答える
0

ドキュメントに従って、スクリプトがバンドルとして実行されているかどうかにかかわらず、さまざまなファイル パスを設定できます。ただし、私の回避策は、スクリプト以外のすべてのファイルが存在する安定した最上位ディレクトリを設定し、この最上位ディレクトリをすべてのモジュールと共有することです。次に、各モジュール内で、最上位ディレクトリに基づいてファイル パスを作成できます。

たとえば、このレイアウトでは、すべてのモジュール コードがsrcフォルダーに格納されています。これらのモジュールにはconf、フォルダー、databaseフォルダー、およびotherconfig.yaml.

├── conf
│   └── config.ini
├── database
├── entry_point.py
├── otherconfig.yaml
├── root_path.py
└── src
    ├── pkg1
    └── pkg2

root_path.py次のようになります。

import os

path = os.getcwd()

各モジュールで、次のように構成ファイルのファイル パスを作成できます。

import root_path

config_path = f"{root_path.path}/conf/config.ini"
otherconfig_path = f"{root_path.path}/otherconfig.yaml"

次に、pyinstaller -F entry_point.py(ファイルを追加せずに) 経由​​で 1 つのファイルの実行可能ファイルを作成した後、同じレイアウトを再作成するだけで、各モジュールのファイル パスは引き続き機能します。

├── bundled_executable
├── conf
│   └── config.ini
├── database
└── otherconfig.yaml

もちろん、この回避策では構成ファイルを非表示にすることはできません。しかし、私のユースケースでは、ユーザーに構成ファイルを変更する自由を与える必要があるため、ファイルを非表示にすることは実際には機能しません。

于 2019-10-31T01:17:02.277 に答える