2011-01-06 7 views
3

新しいインストーラをhttp://www.riverbankcomputing.co.uk/software/pyqt/download からPython 2.6 x86_64に使用しましたが、特定のアプリケーションでPyQt4をインポートするのに少し問題がありました。PyQt4 DLLをパッケージルートに移動する必要があります

# ERROR : Traceback (most recent call last): 
# File "<Script Block >", line 2, in <module> 
#  from PyQt4 import QtCore 
# ImportError: DLL load failed: The specified procedure could not be found. 
# - [line 2] 

これは見覚えがあります

は、ここでトレースバックです。楽しいことは、以前のバージョンの3dソフトウェアでは動作しますが(標準のコマンドラインから)、新しいソフトウェアバージョンでは機能しません。私は、このパスが存在するかどうかを調べるために、sys.path(アプリケーション内)を調べました:C:\ Python26 \ Lib \ site-packages \ PyQt4 \ bin

両方のアプリケーションでこのパスが存在します。

最後に、それはCからDLLをコピーすることによって動作させるために管理:\ Python26 \ Libの\サイト・パッケージを\ Cへの\ binにPyQt4:

は、任意の既知のPython26 \ Libの\サイト・パッケージありPyQt4 \ \これの理由?私はさらにこの事をデバッグに苦労をしたあなたの助け

おかげで私の...\PyQt4\binフォルダで

答えて

6

PyQt4インストーラがPyqt4 \ binディレクトリをWindowsのDLL検索パスに追加する可能性があります。 32ビットと64ビットの両方のバージョンがインストールされている場合、正しいDLLセットが見つかるだけです。

import os 
os.environ['PATH'] = ';'.join((os.path.join(
    os.path.abspath(os.path.dirname(__file__)), "bin"), 
    os.environ['PATH'])) 
+0

おそらく多くのものが影響を与えていたインストール。私はQTの古い32ビットインストールを持っていたし、新しいソフトウェアバージョンにQT DLL(32ビットまたは64ビット、私は知らない)が含まれている。今は魅力のように機能します。 – Xavier

+0

私たちはネットワーク/共有場所にサイトパッケージを設定しました。上記のコードスニペットを 'PyQt4/__ init __。py'に追加すると、他のワークステーションはPyQt4を使用することができ、SDK /ランタイムを各マシンにインストールする必要はありません。ありがとう! –

1

、主にいくつかの実行可能ファイルおよび多くのDLLがある(確かにすべてを作ることは64ビット、パスされている正しい、などがあります) 、おそらく元のQtのものです。あなたはPythonからこれらを使用しません。 .pydファイル(のDLLです)は、少なくとも私のインストールでは、32ビットWin7のPython 3.1をメインディレクトリ(ちょうど...\PyQt4)に入れ、使用するためにQtをラップするコードを含んでいますPython。

+0

おかげで、.pyd事知りませんでした:

ソリューションは、それぞれのLib \サイト - パッケージ\ PyQt4_ のinit _.pyファイルに次のコードを追加することです。奇妙なことは、QtWebKit.pydのサイズは389kb、QtWebKit4.dllは14329kbです。これはラッパーのように機能するので、私はこれらのDLLを1レベル上にコピーしたときに、同じレベルのpydで作業を開始したのですか? – Xavier

+1

@Xavier:なぜこの方法で動作するのか分かりません。私は奇妙な問題の自分自身のシェアを持っていたPyQt dlls自分自身/ /私は.pydファイルは、Pythonに物事を公開するラッピングコードを含むため、引数や戻り値などを変換するので、小さいと仮定します。 – delnan

関連する問題