1

CentOS 6.2 に cx_Oracle をインストールしました。シェルからライブラリをインポートすると正常に動作しますが、wsgi から起動するとエラーが発生します。

ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directory

これは環境変数の問題です。cx_Oracle はライブラリへのパスを見つけられません。

ここで提供されている解決策を試しました

/usr/lib ディレクトリに libclntsh.so.10.1 (ln 付き) へのリンクを追加しました。

Apache構成を編集して追加しました:

ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib
LD_LIBRARY_PATH=$ORACLE_HOME/
PATH=$ORACLE_HOME/bin:$PATH

/etc/ld.so.conf を編集して追加しました:

/usr/lib/oracle/11.2/client64/lib

ldconfig の後に実行

私はPythonを使用しようとしました:

os.env['ORACLE_HOME']='/usr/lib/oracle/11.2/client64/lib'

私はbashrcを次のように編集しました:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib
export LD_LIBRARY_PATH=$ORACLE_HOME/
export PATH=$ORACLE_HOME/bin:$PATH

私もapachectlを編集しました

ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib
export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/
export LD_LIBRARY_PATH
PATH=$ORACLE_HOME/bin:$PATH
export PATH

アイデアが不足しています。助言がありますか ?

4

2 に答える 2

0

cx_Oracle rpm でyum installを使用する代わりに、ライブラリのソースをダウンロードして setup.py ビルドを実行しました。

でインスタント クライアント SDK ライブラリを見つけようとしていた関数を示すエラーが表示されました。

possibleIncludeDirs = ["rdbms/demo", "rdbms/public", "network/public","sdk/include"]

Oracle_home フォルダーをブラウズすると、sdk ファイルが lib フォルダーにインストールされていることがわかりました (私は yum install を使用して oracle から rpm に skd をインストールしました)

if not includeDirs:
        path = os.path.join(oracleLibDir, "include")
        if os.path.isdir(path):
            includeDirs.append(path)
    if not includeDirs:
        path = re.sub("lib(64)?", "include", oracleHome)
        if os.path.isdir(path):
            includeDirs.append(path)

Instant Client sdk (今回はzipファイル) をダウンロードし、lib フォルダーに解凍しました。

libフォルダー(/usr/lib/oracle/11.2/client64/lib)にsdkフォルダーがありました

次に、setup.py ビルドと setup.py インストールを起動しましたが、うまくいきました。

于 2012-07-16T12:31:18.877 に答える
0

Oracle 用の Python モジュールをコンパイルするときは、次のように設定します。

LD_RUN_PATH=/usr/lib/oracle/11.2/client64/lib

ユーザー環境変数をエクスポートします。これにより、そのディレクトリが Python 拡張モジュールの .so ファイルに埋め込まれ、LD_LIBRARY_PATH 環境変数を設定しなくても、実行時にディレクトリを見つける場所がわかります。

標準の Apache ディストリビューション (多くの場合、Linux ディストリビューションは少し異なります) の場合、追加の環境変数を設定するファイルは「envvars」と呼ばれ、「httpd」と同じディレクトリにあります。Linux ディストリビューションの場合、多くの場合、特別な init.d スタートアップ スクリプトが必要です。

したがって、LD_RUN_PATH が何であるかを調べてください。

于 2012-07-11T22:53:31.097 に答える