質問

pyinstallerを使用して、2つのスクリプトを1つの実行可能ファイルに変換します。私が抱えている問題は、2つのスクリプトをバンドルする方法を理解できず、それでもお互いを参照させることです。

問題を引き起こすコードは、1つのスクリプトです。 script1.py 含まれる:

subprocess.call(['gksudo','python script2.py'])

これは、スクリプトを正常に実行するときに正常に機能しますが、Pyinstallerにパッケージ化されると、コールの動作方法がわかりません。

役に立ちましたか?

解決

Pyinstallerがこの種のバンドリングを単独で処理できるとは思わないので、少なくとも可能であれば構成することはできませんでした。また、いくつかの呼び出しがあるかなり大きなアプリケーションがあります

subprocess.popen( 'python' ...)

完了です。私がついにそれを機能させた方法は、次のとおりです。

  1. サブプロセスコールを別のPythonに変更します。 subprocess.call(['gksudo','./python script2.py']). 。エントリポイント用の2つの別々の分析、1つは他のスクリプト用に1つを作成します。

    a1-スクリプトの分析1.py a2-スクリプト2.pyの分析

  2. エントリポイントスクリプトからのみexeを作成します。

    pyz = PYZ(a1.pure)
    exe = EXE(pyz,
      a1.scripts,
      exclude_binaries=1,
      name={name here},
      debug=False,
      strip=False,
      upx=True,
      console=1 )
    
  3. すべてのスクリプトから収集します

        coll = COLLECT( exe,
           a1.binaries,
           a1.zipfiles,
           a1.datas,
           a2.binaries,
           a2.zipfiles,
           a2.datas,
       python_tree, 
           *additional_trees,
           strip=False,
           upx=True,
           name={})
    
  4. すべてのサブプロセスコールで指定された場所の配布にPythonをコピーして、Pyinstallerによって見つかりませんでした(Matplotlib、Pylabなどのようないくつかがありました)

  5. 最初に必要な環境変数を変更してパッケージを指すようにしてからアプリを開始する開始スクリプトを作成します。私の場合、必要なのは、ディレクトリを呼び出すことでした。

     export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
     export LD_RUN_PATH=`pwd`:$LD_RUN_PATH
    

Pythonがインストールされていないマシンでアプリケーションを実行したい場合、またはPythonがインストールされている場合は、アプリがローカルライブラリの代わりに配布パッケージのすべてのライブラリを使用していることを確認してください。あなたの場合、Pythonがすでにターゲットマシンにインストールされている場合、このようなものが必要であり、最初の3つのステップで十分だとは思いません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top