この記事の例では、Python で cx_Oracle モジュールをインストールする際の一般的な問題と解決策について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
cx_Oracle をインストールまたは使用するときは、libclntsh.so.10.1 などの Oracle リンク ライブラリを使用する必要があります。そうしないと、さまざまなエラー メッセージが表示されます。
このリンク ライブラリは、Oracle Instant Client をインストールすることで入手でき、数百メガバイトの Oracle クライアントをインストールする必要がなくなります。
ソフトウェアのダウンロード アドレス:
cx_Oracle のホームページ: http://cx-oracle.sourceforge.net/
必要な Oracle リンク ライブラリのダウンロード アドレス: http://www.oracle.com /technology/software/tech/oci/instantclient/index.html
一般的なエラーと解決策:
1.win32 バイナリのインストール
Windows に cx_Oracle-5.0- をインストールする 10g.win32 以降-py2.6.msi、インポート時に、次のように DLL ロード失敗のエラーが報告されます:
IDLE 2.6.1
>>> import cx_Oracle Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> import cx_Oracle ImportError: DLL load failed: 找不到指定的程序。
解決策:
Oracle サイトから instantclient-basic をダウンロードします - win32-10.2.0.4.zip を解凍した後、oci.dll ファイルを Python インストール ディレクトリの Lib/site-packages (C:/Python26/Lib/site-packages など) にコピーします
二.linux バイナリ後インストール
linux_x86_64 で cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm をインストールするとエラーが発生します。
[root@BJ-UPDATE-01 ~]# rpm -ivh cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm error: Failed dependencies: libclntsh.so.10.1()(64bit) is needed by cx_Oracle-5.0.1-1.x86_64
解決策:
http://www.php.cn/
を参照して、Oracle サイトから Basic-10.2.0.4.0-linux-x86_64.zip を /opt ディレクトリにダウンロードします。それを解凍すると、/opt/instantclient_10_2 ディレクトリに libclntsh.so.10.1 が表示されます
環境変数を設定します
vi /root/.bash_profile
次の 2 行を追加します:
export ORACLE_HOME=/opt/instantclient_10_2 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
ソースを実行/root使用する /.bash_profile 変更が有効になります
このリンク ライブラリへのシンボリック リンクを作成します
cd $ORACLE_HOME ln -s libclntsh.so.x.x libclntsh.so
cx_Oracle を再インストールします
--nodeps パラメータを追加するように注意してください。追加しないと、上記のエラーが発生します報告済み
[root@BJ-UPDATE-01 ~]# rpm -ivh --nodeps cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm #5.0.3版本不用加--nodeps参数
Three . Linux でのソース コードのインストール
linux_x86_64 でのソース コードのインストールの場合、コンパイル中に python setup.py ビルドを実行します。次のように:
Connection.c:1169: 警告: ステートメントが Works と一致しません
Connection.c:1171: エラー: 'udt_Connection' には 'environment' という名前のメンバーがありません
Connection.c:1172: 警告: 互換性のないポインター間の変換(「Environment_CheckForError」の) 引数 1 を渡すときの型
Connection.c:1172: 警告: (「Environment_CheckForError」の) 引数 2 を渡すときの互換性のないポインタ型間の変換
Connection.c:1172: エラー: 関数に指定された引数が多すぎます'Environment_CheckForError'
Connection.c :1176: エラー: 'udt_Connection' には 'sessionHandle' という名前のメンバーがありません
解決策:
このエラーはバージョン 5.0.3 では表示されません。インクルード ディレクトリが必要であることに注意してください。 ORACLE_HOME の下にあり、このディレクトリにコンパイルが必要です。必要なソース ファイルは Oracle Instant Client には含まれていません。 Windows クライアントのディレクトリ D:/oracle/product/10.2.0/client_1/oci/include からコピーしました。
Four.import error
>>> import cx_Oracle Traceback (most recent call last): File "<stdin>", line 1, in ? ImportError: /usr/lib/oracle/10.2.0.4/client64//lib/libnnz10.so: cannot restore segment prot after reloc: Permission denied >>> import cx_Oracle Traceback (most recent call last): File "<stdin>", line 1, in ? ImportError: /usr/lib/oracle/10.2.0.4/client64//lib/libclntsh.so.10.1: cannot restore segment prot after reloc: Permission denied >>> import cx_Oracle >>>
これは、SELinux の制限によるものです:
chcon -t texrel_shlib_t cd $ORACLE_HOME/libnnz10.so chcon -t texrel_shlib_t cd $ORACLE_HOME/libclntsh.so.10.1
Five。
うわーSELinux を無効に設定します
selinux をオフにします:
コマンドを実行します: vim /etc/selinux/config
selinux=enforcing または permissive を無効に変更します
実行コマンド: setenforce 0
6. UNICODE インストール パッケージに問題があります
Traceback (most recent call last): File "oracle_conn.py", line 9, in ? connection = cx_Oracle.Connection(u"oracle/oracle123@CCIP") cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle
現在、パッケージの 5.0.3 バージョンでは SQL を実行するとエラーが発生することが判明しています。使用することはお勧めしません。UNICODE 以外のパッケージに置き換えても問題ありません。
Python インストール cx_Oracle モジュールに関する一般的な問題と解決策に関するその他の記事については、PHP 中国語 Web サイトに注目してください。