2016-09-09 6 views
1

저는 Python 2.7을 실행 중이며 Linux 64 비트 OS에서 cx_Oracle을 사용하고 있습니다. 11.2 또는 12.1 Oracle 클라이언트에 대해 실행할 수 있어야합니다. 배포 된 대상에 어떤 클라이언트가 설치 될지 확신 할 수 없기 때문입니다. 각 Oracle 클라이언트에 대해 작성된 cx_Oracle이 있다는 것을 알고 있습니다. 앱이 작동하는지 어떻게 확신 할 수 있습니까? 필자는 pyinstaller를 사용하여 응용 프로그램을 패키징하고 있음을 언급해야합니다. cx_Oracle 버전이 두 오라클 클라이언트 모두에 대해 구축 되었습니까? 아니면 두 가지 버전의 응용 프로그램이 필요합니까 ... 11g 하나와 12c 클라이언트 하나입니까?여러 오라클 클라이언트 버전이있는 cx_Oracle

답변

1

이론 상으로는 Oracle 11g 버전의 cx_Oracle을 구축하고 Oracle 11g 및 Oracle 12c 클라이언트와 함께 사용할 수 있지만 필자는 권장하지 않습니다. 가장 단순한 Oracle 12c 인스턴트 클라이언트를 사용하도록 사용자를 설득 할 수 있다면. 해당 클라이언트는 아무런 어려움없이 11g 및 12c 데이터베이스에 모두 액세스 할 수 있습니다. 하지만 그럴 수 없다면 다른 옵션은 다음과 같습니다.

1) 11g와 12c 모두에 대해 cx_Oracle을 컴파일하고 cx_Oracle_11g.so 및 cx_Oracle_12c.so와 같은 이름의 설치에 두 복사본을 모두 넣습니다.

2) 가져 오기 cx_Oracle과 동적으로 다음과 같은 코드를 사용 : 당신이 이전과 같은 방식으로 필요한 곳 ​​

for version in ("11g", "12c"): 
    fileName = os.path.join(installDir, "cx_Oracle_%s.so" % version) 
    try: 
     module = imp.load_dynamic("cx_Oracle", fileName) 
     break 
    except ImportError: 
     pass 

3) 동적으로 수입 된 모듈을 사용합니다. 동적으로 적재 된 모듈은 cx_Oracle이라는 이름이 붙어 있기 때문에 규칙적인 방법으로 다른 코드로 가져올 수 있어야하고 동적으로로드 된 모듈을 찾을 수 있어야합니다.

4) Oracle Client 11.2, 12.1 및 12.2를 동시에 지원하는 cx_Oracle 6.x를 사용하십시오.