2012-02-27 55 views
18

私はPythonで書かれたアプリケーションを持っていて、PyInstallerで 'コンパイル'されています。 GUIフレームワークにはPyQtも使用されています。Windows:遅いアプリケーションの開始

メインウィンドウがロードされて表示されるまで、このアプリケーションの実行には約10秒の遅延があります。私が知る限り、これは私のコードの遅さに起因するものではありません。代わりに、私はこれがPythonランタイムの初期化によるものだと思う。

問題は、このアプリケーションがカスタムlaucncher/taskbarアプリケーションで起動されていることです。ユーザーはボタンをクリックしてアプリを起動し、何も表示されないことを確認して、別のアプリケーションの別の場所をクリックします。私のアプリケーションでウィンドウが表示されているとき、SetForegroundWindowのルールのためにフォアグラウンドになることはできません。

PyInstaller win32ローダー、Pythonコード、さらにはランチャーコードのソースにアクセスできます。

私の質問は以下のとおりです。

  • は、どのように私は、このアプリケーションが速く起動することができますか?

  • プロセスの寿命の最初の数秒を測定するにはどうすればよいですか?

  • 最初のウィンドウが表示されるまでの時間を短縮するために一般に認められている方法は何ですか?

私は2つの理由から、スプラッシュ画面の追加を回避したいのですが - 私はちょうどスプラッシュ画面を好きではない、私はそれに役立つ(Pythonのコードが実行される前にオーバーヘッドがある)と2つのではないだろう期待して、1を:)

もし私が必要ならば、PyInstallerローダースタブを編集してウィンドウを作成することもできますが、これは別のルートです。

ありがとうございます。

答えて

1

py2exeとcx_Freezeを使っていくつかのwxPythonアプリケーションをコンパイルしましたが、いずれも起動に4秒以上かかることはありません。

  • あなたのコードではないことは間違いありませんか? あなたのアプリを保持している何らかのネットワークやI/Oリソースコールかもしれませんか?
  • あなた以外のマシンを試しましたか?間違ったソフトウェア設定やアプリ、OSを使って、最速のハードウェアでも速度が遅くなることがあります。
  • timeitモジュールでタイミングをとってみてください。

私は決してpyQTを使用しませんでしたが、wxPythonでは起動速度が問題ありません。また、最初の初期化後にもう一度閉じて開き直すと、最初より速くなります。

8

pyinstallerの「1ファイル」モードを使用していると思われます。このモードでは、アプリケーションを起動する前にすべてのライブラリを一時ディレクトリに展開する必要があります。 Qtの場合、これらのライブラリはかなり大きく、解凍するのに数秒かかります。 「1つのディレクトリ」モードを使用して、それが役立つかどうかを確認してください。

10

PyInstallerにコンソールモード実行可能ファイルを作成するように指示します。これにより、デバッグに使用できる作業コンソールが得られます。

メインスクリプトの先頭に、最初のインポートが実行される前であっても、「Python Code starting」という印刷物を追加します。次に、パッケージ化された実行可能ファイルをコマンドラインから実行します。 PyInstallerのブートローダやアプリケーションで時間が過ごしたかどうかを明確に把握できます。

PyInstallerのブートローダは、通常、1つのディレクトリモードではかなり高速ですが、すべてのファイルを一時ディレクトリに展開するため、1ファイルモードでは非常に遅くなる可能性があります。 Windowsでは、I/Oが非常に遅く、これらのDLLファイルをすべてダブルチェックするアンチウィルスがあります。

PyQt自体は問題ではありません。 PyQtは、非常に高速の遅延バインディングを生成するSIPによって生成されます。基本的に何もしないので、PyQt全体を他のGUIライブラリよりも高速に読み込むことができます。クラス/関数へのすべてのバインディングは、アクセスすると動的に作成されます。

アプリケーションが起動するのが遅い場合は、PyInstallerもなくてもそれが当てはまります。その場合、あなたの唯一の解決策は、スプラッシュスクリーン(ちょうどPyQをインポートする、QApplicationを作成する、スプラッシュスクリーンを表示する、残りのプログラムをインポートして実行する)、またはコードを修正することです。私は細かいことなくあなたに多くを助けることはできません。

+0

あなたは正しいですが、私はよりシンプルなアプリケーションを作成しました。実際、起動時間はほぼ瞬時になりました。私はonedirモードを使用しています。私は問題が私のいくつかの輸入品であると信じています。私にはもっとたくさんの追跡があります。 –

+0

ワウ、アンチウイルスのヒントをありがとう。 AVを無効にすると、私のexeはスピードアップしました。 – iridescent

1

私は上記の回答に同意します。私のQtのpythonプログラムは、onefileモードを使用しているときにまともなPCで起動するのに約5秒必要でした。私が--onedirに変更した後、起動には約1秒しかかかりませんでした。ユーザーがexeファイルをダブルクリックした直後。しかし、その欠点は、あまりにもきちんとしていない多くのファイルがそのディレクトリにあるということです。

関連する問題