12

cx_Oracle をインポートしようとすると、標準の「DLL ロードに失敗しました。モジュールが見つかりません」というエラーが表示されます。適切なインスタント クライアントがインストールされています。パスはすべて正しいです... Dependency Walker を実行すると、次の .dll の MSVCR90、GPSVC、IESHIMS が見つからないことがわかります。

Oracle 11g と Python 2.7 のインスタント クライアントを実行しています。誰にもアイデアはありますか?私が見つけた答えのほとんどは間違ったパスを伴いますが、そうではないようです...さらに、システムの他の場所に.dllが見つかりません。

EDIT:Oracle XE 11g(32ビット)をインストールしました。Python 2.7 と cx_Oracle も 32 ビットです (Windows を使用していることも付け加えておきます)。cx_Oracle がクリーンにインストールされるようになりました。ただし、接続時にエラーが表示されます。

InterfaceError: Unable to acquire Oracle environment handle

ORACLE_HOME パスは正しいです。PATH フォルダー内の bin も同じです...

4

5 に答える 5

8

実行している Windows のバージョンを教えてください。それは32または64ビットですか?

Oracle Instant Client は32ビットまたは64ビットですか?

Python インストールは32ビットまたは64ビットですか?

cx_oracle は正しいバージョンですか? 32または64ビット?

MSVCR90.dll は、Microsoft Visual C++ 2008 SP1 再頒布可能パッケージの一部です。

32 ビット版はこちらから、64 ビット版はこちらから入手できます

C:\Program Files\Internet Explorer\Ieshims.dllバージョンがWindows は Vista 以降です。

GPSVC.dll は に存在する必要がありC:\Windows\System32ます。

Dependency Walker は、これらの最後の 2 つの DLL が欠落していると報告します。これは、IEFrame.DLL を使用し、遅延ロードされる Windows エラー報告で使用されているためです。つまり、実際には必要ない可能性があります。

cx_oracle を正常にインポートするには、その依存関係のバージョンが一致していることを確認する必要があることがわかりました。また、Oracle クライアントのインストールがご使用のものと一致ORACLE_HOMEし、PATH 変数に が含まれていることを確認する必要があります%ORACLE_HOME%/bin。これは、環境変数またはレジストリで設定され、tnsnames.ora ファイルが TNS_ADMIN に設定されている値に存在する必要があります。Emmanuelの回答で述べたように、未設定の TNS_ADMIN 設定のデフォルト値は です%ORACLE_HOME%\network\admin

また、他のバージョンとは異なり、パス、ORACLE_HOME、または TNS_ADMIN が正しく設定または維持されていることを常に保証するわけではないため、どうしても必要な場合を除き、Oracle インストーラーのインスタント クライアント バージョンを使用することはめったにありません。見つかった。同じマシンに複数の Python バージョンまたは Oracle バージョンがある場合、これはさらに複雑になります。

それらを明示的に設定するには、環境変数 (ユーザーまたはシステムのいずれか) を使用できます。これは、コントロール パネルのシステム アイコン、高度なシステム設定タスク、高度なタブ、環境ボタンの下にあります。

に関してInterfaceError: Unable to acquire Oracle environment handle、これは OCI.dll を解決しない場合とは対照的に、cx_Oracle が使用する OCI.dll を認識しない場合に特に発生します。通常、これは、OCI.dll を含む 2 つ以上の検索ディレクトリを含む PATH 変数が原因です。

具体的には、PATH にインスタント クライアント インストールまたは Oracle 11G XE インストールのいずれかからの OCI.dll のインスタンスが 1 つだけ含まれていることを確認すると、問題が解決するはずです。

Oracle 11G XE をインストールする前にインスタント クライアントをアンインストールしましたか?

コマンドプロンプトに以下を貼り付けます。

echo The current ORACLE_HOME is %ORACLE_HOME%

echo The current TNS_ADMIN is %TNS_ADMIN%

echo The current PATH is %PATH%

これらの変数の現在の値を確認します。

その他のリソース

于 2012-11-27T19:07:42.927 に答える
4

私は同じ問題を抱えていました:変数ORACLE_HOMEをOracleクライアントフォルダーと一致するように設定する必要があります(Unixの場合:たとえばシェルを介して、Windowsの場合:構成パネルの環境変数に存在しない場合は新しい変数を作成します)これは、cx_Oracleモジュールがそれにリンクできる方法であるためです。

あなたのフォルダー$ORACLE_HOME/network/admin( %ORACLE_HOME%\network\adminWindows では) は、tnsnames.oraファイルが存在する場所です。

于 2012-11-27T18:42:24.560 に答える