簡単な質問
pyinstaller実行可能ファイルをビルドするときにアーキテクチャ(32ビットと64ビット)を制御/保証する方法はありますか?
背景
64ビットのサポートがないことと、過去を振り返るのに苦労している多くの小さなことのために、py2exeからpyinstallerに移行しました。ですから、その点については、私はそれに戻りたくないのです。Python 2.7 64ビットを使用して2つのアプリケーションを開発しましたが、32ビットマシンで実行するとパフォーマンスの問題が発生します。
1つ目は単純なwxPythonGUI(バージョン2.9)で、USBドライバー用のWindowsDLLファイルに接続します。64ビットのみのモジュールがないため、これは32ビットとして実行するのにかなり「安全」に思えます。ただし、このアプリケーションを32ビットWindows XPで実行すると、USBデバイスと通信するときにパフォーマンスの問題が発生します。
2番目のアプリケーションははるかに大きく、アーキテクチャの問題を恐れているため、まだビルドして実行しようとはしていません。このアプリケーションには、64ビットのみのモジュール(1つはpsycopg2)が使用されています。32ビットの実行可能ファイルとして実行 できない場合は、これをビルドしようとしないでください。
現在の考え
これは、Pythonを32ビットモードで強制してbuild.pyを実行することで可能になると思います(モジュールが32ビットをサポートしている場合)。これは意味がありますか?
更新
私が構築していた最初のプログラムでいくつかのブレークスルーがありました。パフォーマンスの問題は、2台のマシンの速度のみに基づいていたことがわかりました。私の開発マシンには、USBデバイスを十分に高速にポーリングするのに十分な電力がありましたが、はるかに遅いテストプラットフォーム(Windows XP)にはありませんでした。
USBポートのポーリング方法を変更することで、この問題を修正しました。これが修正されたので、両方のシステムでexeを実行できました。実行可能ファイルを単一のファイルとしてビルドしようとすると、新しい問題が発生しました。pyinstallerのBuild.pyを実行すると、アプリの実行に必要なすべてのDLLが取り込まれます。これは最初はうまく機能しているように見えましたが、Windows 7 64ビットで構築した単一のexeを実行しようとすると、USBドングルのDLLが有効なDLLとして認識されなかったため、WindowsXPでは実行されませんでした。
両方のシステムで単一のexeを実行するために、最初に.specファイル(Pythonスクリプトのように見えます)からDLLを削除しようとしました。通常のPythonリスト修飾子を使用してビルドコマンドの前にインクルードのリストを変更できたので便利でした。私の望みは、DLLがexeの一時ディレクトリで見つからなかった場合、システムPATHで見つかることでした。このアプローチは機能するかもしれませんが、多くのエラーをスローせずに実行することはできませんでした。
私の2番目の試みは、Win XPDLLがWindows7で機能することを期待して、Windows XPマシンでアプリケーションをビルドすることでした(DLLを埋め込んだままにします)。成功!この構成はうまく機能します。ただし、新しいOSで実行されている古いDLLのみに依存しているため、これは最善の解決策ではないと強く信じています。