python 3.5およびpyinstallerバージョン3.1.1を使用しています。SCADAsync_spec.specという.specファイルを次のように指定しました。
block_cipher = None
a = Analysis(['SCADAsync.py'],
pathex=['C:\\repo\\analysis\\trunk\\source\\python\\functions', 'C:\\repo\\analysis\\trunk\\source\\python\\Executables'],
binaries=None,
datas=[('figs\\ROMO_icon.ico','figs'),('figs\\OpenFile2.gif','figs'),('figs\\ROMOWind_Logo2015_CMYK.png','figs')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='SCADAsync',
debug=True,
strip=False,
upx=True,
console=True
)
で実行すると正常に動作します
pyinstaller SCADAsync_spec.spec
これで、2つの大きなフォルダー(distとbuild)が作成され、デフォルトのディレクトリ以外の場所に保存したいと思います。スペックファイルでこれらのフォルダの場所を設定する方法を知っている人はいますか?コマンドラインコマンドをできるだけシンプルにしたいと思います。つまり、.exeは入力するだけでビルドできます。
pyinstaller SCADAsync_spec.spec
Pyinstallerのマニュアルから、スペックファイル( https://pythonhosted.org/PyInstaller/spec-files.html )に「DISTPATH」および「workpath」というグローバルを指定できるようです。しかし、私はそれを行う方法を本当に理解することはできません。
どんな助けでも大歓迎です!
ニック
JonasGrögerが指摘したように、あなたは確かに次のことができます。
import PyInstaller.config
PyInstaller.config.CONF['workpath'] = "./my_build_directory"
# ... rest of spec file
ただし、構成モジュールのドキュメントには、限られた数の変数でのみ機能すると記載されています。
このモジュールは、実行時のPyInstaller構成を保持します。
変数CONFは、ビルドフェーズに必要なすべての構成オプションを備えたdict()です。ビルドフェーズは、.specファイルをexec()関数に渡すことによって実行されます。 CONF変数は、exec()に引数を渡す方法と、「グローバル」変数の使用を回避する唯一の方法です。
注:「グローバル」変数を使用すると、テスト用の分離された環境が提供されないため、テストスイートではうまく機能しません。この場合、一部のテストが失敗する可能性があります。
注:「CONF」dict()は、他の可能なテストに干渉しないように、ビルドフェーズの後にクリーンアップされます。
ビルドフェーズに引数を渡すには、次のようにします。
from PyInstaller.config import CONF CONF['my_var_name'] = my_value
そして、ビルドフェーズでこの変数を使用するには:
from PyInstaller.config import CONF foo = CONF['my_var_name']
これは既知の変数のリストです。 (必要に応じて更新してください。)
cachedir
hasUPX
hiddenimports
noconfirm
pathex
ui_admin
ui_access
upx_dir
ワークパス
大文字で「DISTPATH」を使用すると、トリックは機能しません(Pyinstaller3.3.1およびpython 2.7.13))が、小文字に設定すると、次のようになります。
import PyInstaller.config
PyInstaller.config.CONF['distpath'] = "./my_app_directory"
# ... rest of spec file
それはうまくいくでしょう... :)
Pyinstallerのspec/build/distロケーションパスは、pyinstallerコマンドの一部として構成できます。以下の例を参照してください
pyinstaller --specpath /opt/bk/spec --distpath /opt/bk/dist --workpath /opt/bk/build testscript.py