2017-12-02 15 views
8

私は3つのスクリプトを持っていたとしましょう。 Main.py(すべてのインポートを持つ)、1.py(ランダムスクリプト)、2.py(ランダムスクリプト)選択した場所からのPythonモジュールのインポート

pyinstaller -F --onedir Main.py (80mb) 
pyinstaller -F --onedir 1.py (80mb) 
pyinstaller -F --onedir 2.py (80mb) 

これは3つのフォルダを作成してから、1.exeと2.exeをすべての依存関係を持つメインフォルダにコピーするとうまく動作します。

image

2つの問題が存在している:

問題はサイズです。 1つのファイルでこれを30MBに減らし、1つのフォルダで80MBにします。

さらに重要なことに、exeではそのフォルダを残すことができません。私はPythonでショートカットを使うことに頼らざるをえなかった。

私はthisに従っていますが、これはおそらく回避策です。

私の質問は、pyinstallerを使って選択した場所からインポートファイルを読み込むにはどうすればよいのですか?

ロジック: コンパイルMain.py pyinstaller -F –onefile Main.py (15mb).

を使用してはC:\13C:\13\Main.exe

リンクすべてのexeのようなC:\13\のでexeファイルルックスでフォルダを作成しますか? --runtime-tmpdir PATH

私は、exeファイルや"one dir"フォルダからのインポートについてのドキュメントを見つけるのに苦労しています。私はどこでもexeを実行することができますので、取得場所から輸入を得ることはあまりありません。さらに、Pyinstallerのモジュールがこの混乱に加えて逆コンパイルされていないことがわかりにくいです。

多分...

pyinstaller -F --runtime-tmpdir C:\13 --onefile 2.py 

pyinstaller -F --runtime-tmpdir C:\13 --onedir 3.py 

何のディレクトリが作成されていない私にとってけど。選択した場所からインポートを取得するにはどうすればよいですか。

solution別の可能:

if getattr(sys, 'frozen', False): 
     os.path.join(sys._MEIPASS, "C:\aa") 

をあなたがimageで見ることができるように、それはだけど、我々はから選択するいくつかのファイルがあるパンダを望んでいたと言うことができます...

+0

pyinstallerのドキュメントには、同じ依存関係を共有する複数のexeファイルをパッケージ化する方法の詳細な章があります。https://pyinstaller.readthedocs.io/en/stable/spec-files.html#multipackage-bundles –

+0

@FlorentB。 "この機能はPyInstaller 3.0リリースでは壊れています" –

答えて

0

私は同じ問題を持っていましたPyInstallerでバージョン3.0に切り替えたときにNuitkaが私のために解決しました。

あなたは.pydのlibファイルにあなたのMain.pyをバンドルし、この「DLL」からすべての必要なパッケージをインポートします1.py2.pyのための実行可能ファイルを作成することができます。したがって、libファイルを特定の場所に置き、実行ファイルを起動する直前に(例えば、バッチファイルやシェル設定で直接)PYTHONPATHを設定することができます。この機能は現在壊れているよう

+0

私は過去にNuitkaを使用していましたが、設定が非常に混乱していました。私は一日を、セットアップのエラーの無限の配列を通って過ごしました。これは楽しいものではなく、問題に関するほとんどのドキュメンテーションです。より深いガイドを提供できれば、他の人がこれで恩恵を受けるかもしれないように感じる。私の心はPyinstaller上でとてもうまく設定されており、docs +のサポートが優れているので、 "Nuitka"を使うとおそらく役に立たないxD –

0

私はこれをさらに調査し、解決策はonefile使用

後に私が答えであることをhereを提示信じていることはできません。

私の最初の懸念事項に対処するために、UPXと仮想ディレクトリ。最後に、すべてのファイルを1つのディレクトリに入れます。最後に、私が画像で行ったようにexeファイルをフォルダに置くと、ファイルが縮小されます。

pythonスクリプトでショートカットを作成することができます(これがまだ問題である場合)。実際の必要はなく、すべてのexeファイルを実行しています。彼らは将来、onefileを修正するかもしれませんが、私はこの解決策に満足しています。

結果: 小さいファイル。

これらのexeファイルはどこでも実行できますか?悲しいことに、マルチパッケージバンドルがなくても、壊れているわけではありません。ショートカットを作成することもできますが、これは私が思ったほど悪くありません。彼らは将来それを修正することができますが、その間にこのソリューションはそれが得られるほど良好です。私が間違っている場合は私を修正しても構いませんが、私はこの解決策に満足しています。

関連する問題