ホームページ  >  記事  >  バックエンド開発  >  Python で cx_Oracle モジュールをインストールする際の一般的な問題と解決策

Python で cx_Oracle モジュールをインストールする際の一般的な問題と解決策

高洛峰
高洛峰オリジナル
2017-02-24 15:00:491681ブラウズ

この記事の例では、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 サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。