4

exeを実行するときに、Windows 7で最新のpyinstallerを使用してスタンドアロンexe(-F)を作成します。

ImportError:名前QtGuiをインポートできません

pyinstallerフックディレクトリには、PySideではなくPyQt4の特別な処理があります。

これまたは何かを試すための回避策を期待しています。

環境
Windows764ビットPython2.732
ビット
PYTHONHOME=c:\ python27
PYTHONPATH = c:\ python27 \ lib
PYTHONLIB = c:\ python27 \ libs \ python27.lib; c:\ python27 \ lib \ site-packages

手順1.http :
//releases.qt-project.org/pyside/1.1.1/PySide-1.1.1qt474.win32-py2.7.exeからPySideを追加します2.https ://github.com/pyinstaller/を 解凍しますpyinstaller / zipball / development to c:\pyinstaller1.5.13 .以下を含む.pyファイルに対して以下のコマンドを実行します。


from PySide import QtGui

[...またはQtCoreまたはまたは。]

走る

c:\pyinstaller1.5.1>pyinstaller.py -F import_test.py
108 INFO: wrote c:\pyinstaller1.5.1\import_test.spec
171 INFO: Testing for ability to set icons, version resources...
296 INFO: ... resource update available
312 INFO: UPX is not available.
4321 INFO: checking Analysis
4382 INFO: checking PYZ
4430 INFO: checking PKG
4446 INFO: building because c:\pyinstaller1.5.1\build\pyi.win32\import_test\import_test.exe.manifest changed
4446 INFO: building PKG out00-PKG.pkg
16782 INFO: checking EXE
16782 INFO: rebuilding out00-EXE.toc because pkg is more recent
16782 INFO: building EXE from out00-EXE.toc
16799 INFO: Appending archive to EXE c:\pyinstaller1.5.1\dist\import_test.exe

c:\pyinstaller1.5.1>dist\import_test.exe
Traceback (most recent call last):
  File "<string>", line 23, in <module>
ImportError: cannot import name QtGui

ノート

PySideのインストールの最後に(管理者として)、次のメッセージが表示されます。
    ファイルオブジェクトデストラクタで閉じることができませんでした:
    sys.excepthookがありません
    失われたsys.stderr
インストール後の場合は、手動で処理できます。
    c:> python.exe c:\ Python27 \ Scripts \ pyside_postinstall.py -install
    ファイルC:\ python27 \qt.conf..を生成しています
    PySideはc:/ python27 / Lib / site-packages /PySide..にインストールされています
    PySide拡張機能が正常にインストールされました。

4

2 に答える 2

2

回避策。これはうまくいきました:

# Various imports, whatever, using normal sys.path, for example:
import os, sys, re, time, random
import subprocess, psutil

# Save sys.path
sys_path_saved = sys.path

# Limit sys.path for PySide import
sys.path = ['c:\\python27\\lib\\site-packages']

# PySide imports with limited sys.path
from PySide        import QtGui, QtCore
from PySide.QtGui  import QApplication, QLineEdit
from PySide.QtCore import QSettings, Qt

# Reset sys.path to original
sys.path = sys_path_saved

# Remainder of code...

Pyinstaller 1.5.1は、依存関係を見つけるのに優れた仕事をするはずであり、多くの場合そうします。ただし、.specでpathexまたはhiddenimportsを使用しようとする多くの試みはすべて失敗しました。環境変数の変更も失敗しました。.eggからさまざまなモジュールファイルを手動で抽出すると、うまくいくことがありました。

ただし、PySideインポートの場合、上記のsys.pathの一時的な制限が機能した回避策でした。

更新:残念ながら、exeはPython / Pysideがインストールされているマシンでのみ動作し、PythonがないXPでは動作しません。

于 2012-07-09T16:08:07.280 に答える