이 글에서는 주로 Python에서 cx_Oracle 모듈을 설치하는 데 따른 일반적인 문제와 해결 방법을 소개합니다. Windows 플랫폼과 Linux 플랫폼에서 Python에 cx_Oracle 모듈을 설치하는 데 대한 일반적인 문제, 해결 방법 및 관련 주의 사항을 분석합니다. 참조할 필요가 있습니다
이 문서의 예에서는 Python에 cx_Oracle 모듈을 설치할 때 발생하는 일반적인 문제와 해결 방법을 설명합니다. 참고용으로 공유해 주세요. 자세한 내용은 다음과 같습니다.
cx_Oracle을 설치하거나 사용할 때 libclntsh.so.10.1과 같은 Oracle 링크 라이브러리를 사용해야 합니다. 그렇지 않으면 다양한 오류 메시지가 나타납니다. .
수백 메가바이트의 Oracle 클라이언트를 설치하지 않으려면 Oracle Instant Client를 설치하여 이 링크 라이브러리를 얻을 수 있습니다.
소프트웨어 다운로드 주소:
cx_Oracle 홈페이지: cx-oracle.sourceforge.net/
필요한 Oracle 링크 라이브러리 다운로드 주소: 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를 다운로드합니다. .zip, 압축을 푼 후 oci.dll 파일을 Python 설치 디렉터리의 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
해결책:
cx-oracle.sourceforge.net/BUILD.txt를 참조하세요.Oracle 사이트에서 basic-10.2.0.4를 다운로드하세요. .0-linux-x86_64.zip을 /opt 디렉터리에 복사하고 압축을 풀면 /opt/instantclient_10_2 디렉터리에 libclntsh.so.10.1이 표시됩니다.환경 변수 설정
vi /root/.bash_profile다음 두 줄을 추가하세요:
export ORACLE_HOME=/opt/instantclient_10_2 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOMEsource /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에 소스 코드를 설치하고, pythonsetup.py 빌드를 실행합니다. , 컴파일 중 오류 메시지는 다음과 같습니다.
Connection.c:1169: 경고: 문이 작동하지 않습니다.Connection.c:1171: 오류: 'udt_Connection'에 'environment'라는 멤버가 없습니다.
Connection.c:1172: 경고: 매개변수 1 전달(인수 2 전달 시 호환되지 않는 포인터 유형 간 변환 중('Environment_CheckForError')
Connection.c:1172: 경고: 인수 2 전달 시 호환되지 않는 포인터 유형 간 변환 중) ('Environment_CheckForError' 중)
Connection.c:1172: 오류:
함수 'Environment_CheckForError'에 너무 많은 인수가 제공되었습니다. Connection.c:1176: 오류: 'udt_Connection'에 이름이 지정된 멤버가 없습니다. '
세션처리'
해결 방법:
이 오류는 버전 5.0.3에서는 발생하지 않습니다.4.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 handleSELinux를 비활성화하는 것은 여전히 한계입니다
해제하세요. selinux:
명령 실행: vim /etc/selinux/configselinux=enforcing 또는 permissive를 비활성화로 변경
명령 실행: setenforce 0
6. UNICODE 설치 패키지에 문제가 있습니다
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[관련 권장 사항] 2. 3.
위 내용은 cx_Oracle 설치 시 발생하는 오류 및 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!