3

作成した PyQt4 アプリケーションを PySide に移植しましたが、実行可能ファイルを作成できません。py2exe、cx_freeze、および PyInstaller を使用して PySide の exe を作成しようとしましたが、最初の 2 つは同様のエラーを提供します (ビルド中にエラー レポートを提供するものはありません。exe を実行しようとするまではすべて問題ないように見えます) - PyQt4 バージョンはpy2exe.

システム情報

Windows 7、64 ビット - すべてのソフトウェアは、使用されているパッケージ以下の 32 ビット バージョンです。

  • Python(x,y) 2.7.3.1 経由の Python 2.7.3
  • Qt 4.8.2
  • Pyサイド1.1.2
  • ナンパイ 1.6.2
  • パイウィン32 218-1

Exe 変換プログラム

  • PyInstaller 2.0
  • cx_Freeze 4.3.1-1
  • py2exe 0.6.9

py2exe err.Log

Traceback (most recent call last):
File "myApp.pyw", line 11, in <module>
File "PySide\QtGui.pyc", line 12, in <module>

File "PySide\QtGui.pyc", line 10, in __load

ImportError: DLL load failed: The specified procedure could not be found.

cx_freeze err.Log

Traceback (most recent call last):
File "C:\Python27\Lib\site-packages\cx_Freeze\initscript\Console.py",
line 27, in <module>
exex code in m.__dict__
File "myApp.pyw", line 11, in <module>
File "ExtensionLoader_PySide_QtGui.py", line 11, in <module>
ImportError: DLL load failed: The specified procedure could not be found.

参考までに: MyApp.pyw の Line11 = PySide インポート QtGui、QtCore から

PyInstaller err.Log

"The application has failed to start because its side-by-side configuration is 
incorrect. Please see the application event log or use the command-line sxstrace.exe
tool for more detail."

私が見つけることができる最も近いものはここにありますが、私はそのライブラリを使用していないので、適用可能だとは思いませんし、それを解決する方法も知りません.

PyInstaller エラーの SxsTrace のスニペット

INFO: Reference: Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32    ",version="9.0.21022.8"

私が試したこと

  1. 環境変数パスの先頭に「C:\Python27\Lib\site-packages\PySide」を配置

  2. msvcr90.dll、msvcp90.dll、msvcm90.dll のコピーを Python/dll の場所に配置: msvcp90.dll だけで py2exe が動作可能な PyQt4 exe を作成できると信じていました

  3. pyside-rcc を使用してすべての qrc リソース ファイルを作り直しました

  4. すべての pyside/dll を dist フォルダー (py2exe) に配置しました

  5. sxstrace を実行し、PyInstaller エラーでログ ファイルを生成しました。何を探しているのかわかりません。イベント ビューアまたはメッセージボックスからまだ通知されていないものは何も表示されません (それ以上のことです)。

  6. すべての python/modules、pyqt、pyside、VSE2008 C++ エディション、microsoft SDK、microsoft .netframe work 2.0?、Microsoft Visual C++ 2008 Redistributable Package、

  7. パッケージには必要ないがディレクトリにあるすべての進行中のモジュールを移植しました

  8. 正常に移植されなかった/接続されていない WIP モジュールを削除しました

  9. (手動で setup.py ではなく) qt.conf (pyside のみの pyqt4 には存在しないようです?) とプラグインを dist フォルダーにコピーしました

4

1 に答える 1

3

私はpy2exeを使用して動作する実行可能ファイルを取得することができました(PyInstallerではまったくcx_freezeを使用しませんでした)。各モジュールをスタンドアロンのexeに変換することで、これをデバッグできました。

  • これにより、他の方法では再現できなかったエラーが明らかになりました。
  • 上記のエラーの主な問題は、1 つのモジュールで PyQt4 を PySide に変換できないことが原因でした。

これはデータ読み込みモジュールであり、exe を作成する前にポートをテストしているときにクリックし忘れたに違いないことに注意してください。他のすべての PySide 変換は既に行われています。

注意:

from PySide import QtCore, QtGui

IDE が QtCore が使用されておらず、Python が問題なくモジュールを実行していると言っている場合でも、常に必要です。これは、QtCore なしで Python を介して動作させることができる場合でも、そのモジュールの exe を作成するために必要です。

これは実際にはメイン ウィンドウの exe を作成する必要はありませんが、モジュールの動作 exe を作成できることは役に立ちました。


変換プログラムの結果

py2exe - 動作します!

標準の setup.py ファイルだけで特別なことは何もありません。

cx_Freeze

ある程度は機能しますが、動作が不規則で、理由についての説明はありません...

データをロードするためのほぼ同一のプロセスが 3 つありますが、主な違いはロードするファイルです。小さいファイルのロードは問題なくロードされますが、大きいファイルはハングして実行する前にどこかで終了します...それらの前にmsgboxを配置すると、それらを機能させることさえできませんでした。

同様に、データを取得し、show() の前に少し計算を行う必要があるダイアログがあります...何もしません-理由がわかりません。ただし、メインウィンドウとほとんどのプログラムは機能します。

PyInstaller

個々のモジュールすべてに対して exe を作成できますが、メイン ウィンドウ モジュールに対しては作成できません。実行しようとすると、pywin32-218 を使用していてパンダを使用していないことを除いて、 Ticket#590とまったく同じ問題が発生しました。

これを実行しようとすると: ImportError: No module named pythoncom

ビルド プロセスは次のことを示します: 警告: pythoncom はその名前を pythoncom27 に変更しています

本当に奇妙な部分は、pywin32 から実際にインポートするモジュールを操作可能な exe に変えることができることです。このモジュールを呼び出すウィジェットも同様ですが、これらの他のウィジェットを呼び出すメイン ウィンドウでエラーが発生します。

PyInstaller の 2 番目の問題

close イベントを再実装したすべてのスタンドアロン ウィジェットは、閉じるとハングします。

def closeEvent(self, event):
    self.results.addResultsToDB()
    event.accept()

上記は、スタンドアロン アプリとしての py2exe では発生しません。

于 2013-01-05T23:23:15.057 に答える