>  기사  >  백엔드 개발  >  Python에 cx_Oracle 모듈을 설치하는 데 대한 일반적인 문제 및 해결 방법

Python에 cx_Oracle 모듈을 설치하는 데 대한 일반적인 문제 및 해결 방법

高洛峰
高洛峰원래의
2017-02-24 15:00:491656검색

이 문서의 예에서는 Python에 cx_Oracle 모듈을 설치할 때 발생하는 일반적인 문제와 해결 방법을 설명합니다. 참고용으로 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

cx_Oracle을 설치하거나 사용할 때 libclntsh.so.10.1과 같은 Oracle 링크 라이브러리를 사용해야 합니다. 그렇지 않으면 다양한 오류 메시지.

수백 메가바이트의 Oracle 클라이언트를 설치하지 않으려면 Oracle Instant Client를 설치하여 이 링크 라이브러리를 얻을 수 있습니다.

소프트웨어 다운로드 주소:

cx_Oracle 홈페이지: http://cx-oracle.sourceforge.net/

필요한 Oracle 링크 라이브러리 다운로드 주소: http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

일반적인 오류 및 해결 방법: Windows에서

1.win32 바이너리 설치

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 파일을 복사합니다. Lib으로 이동 /site-packages(예: C:/Python26/Lib/site-packages

2. 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 디렉터리로 다운로드하고 압축을 풀면 libclntsh.so.10.1이 /opt/instantclient_10_2 디렉터리

환경 변수

vi /root/.bash_profile

다음 두 줄을 추가합니다.

export ORACLE_HOME=/opt/instantclient_10_2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

source /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参数

3. linux에서 소스코드 설치

linux_x86_64에서 소스코드를 설치하려면 python setup.py를 실행하세요. 빌드 중 오류 메시지는 다음과 같습니다.

Connection.c:1169: 경고: 문이 작동하지 않습니다.

Connection.c:1171: 오류: 'udt_Connection'에 'environment'라는 멤버가 없습니다.
Connection.c:1172: 경고: 매개변수 1 전달 중 인수 2 전달 시 호환되지 않는 포인터 유형 간 변환('Environment_CheckForError')
Connection.c:1172: 경고: 인수 2 전달 시 호환되지 않는 포인터 유형 간 변환( of 'Environment_CheckForError')
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 오류

>>> 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

5. 런타임 오류

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

여전히 SELinux의 제한 사항입니다. SELinux를 비활성화로 설정하세요

selinux를 끄세요:

다음 명령을 실행하세요. vim /etc/selinux/config

selinux=enforcing 또는 permissive를 비활성화로 변경
다음 명령을 실행하세요: setenforce 0

6 유니코드 설치 패키지에 문제가 있습니다.

Traceback (most recent call last):
 File "./oracle_conn.py", line 22, in ?
  folderIds=cursor.fetchmany(10)
cx_Oracle.DatabaseError: OCI-22061: Message 22061 not found; No message file for product=RDBMS, facility=OCI; arguments: [T

현재 패키지 5.0.3 버전에서는 SQL 실행 시 오류가 발생하는 것으로 확인되었으며 권장하지 않습니다. UNICODE가 아닌 패키지로 교체하시면 문제가 없습니다.

Python 설치 cx_Oracle 모듈에 대한 일반적인 문제와 해결 방법에 대한 더 많은 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.