質問: お世話になります。 PyInstallerでtest1.pyとtest2.pyをそれぞれ別の実行ファイルにしつつ、同じフォルダに配置したいのですが、何か方法はないでしょうか。 試しに、PyInstallerの「--distpath」オプションで作成先のフォルダを変更してみましたが、やはりtest1とtest2のように別々のフォルダに保存されてしまうようです。 ちなみに、「--onefile」オプションで同じディレクトリに保存はできるのですが、起動速度などの観点から今回はこのオプションを使わずに実装したいと考えています。 何か良い方法があれば、教えていただけると幸いです。 以上、よろしくお願いいたします。
回答: 以下にちょうど同じ要望が出ていて、解決しています。 ただし解決方法である `COLLECT` の詳細は、まだ文書化が不足しているようです。 そういうわけで、対処方法は以下になると思われます。 Multipackage Bundles の説明を元に、以下の作業を行う。 * それぞれ作りたい `.exe` ファイル毎に `spec file` を作成する * 上記をまとめた1つの `spec file` を作成し、`Analysis(...)`, `PYZ(...)`, `EXE(...)` はそれぞれユニークな名前になるようにして、分離したまま追記していく * `COLLECT(...)` はすべてをまとめた1つだけを指定する * `MERGE(...)` と `--onefile` は使わない Multiple executables in different directories #3663 > > 私は複数の実行ファイルを構築しようとしています。 このスペックファイル[0]を持つmain.pyとmain2.pyがあります。 > > PyInstallerを実行した後、私はdist\main\main.exeとdist\main2\main2.exeを得ます。 > > PyInstallerがすべての実行ファイルを同じディレクトリに置くことは可能ですか? > > spec fileへのリンク > > > あなたはMEREGEを使っていますが、これは壊れていて、誰かにそれを直すように求めています。 > > 手助けをしたい場合は、未解決の問題を検索してください。 > > これ以外に、PyInstallerは複数の実行ファイルを1つのディレクトリに入れることができます。 > > もちろん、あなたは単一のCOLLECTを使わなければなりません。 > > > シングルコレクトをどのように使いますか? > > この例では、複数のCOLLECTステートメントがあります。 > > 説明へのリンク > > > @altendkyのおかげで、すべてを1つのCOLLECTに* args [0]として渡すことができます。 > > COLLECTはどこに文書化されていますか? > > > > ``` > coll_main = COLLECT(exe_main, > a_main.binaries, > a_main.zipfiles, > a_main.datas, > exe_main2, > a_main2.binaries, > a_main2.zipfiles, > a_main2.datas, > strip=False, > upx=True, > name='main') > > ``` > > COLLECTは文書化されていません。 多分あなたは#1371を助けたいです。 > > > ちなみに文書化の要望はまだ処理されていないようです。 Document COLLECT #3741