문제

Oracle 데이터베이스를 사용하는 Python에서 웹 서비스를 코딩하고 있습니다. cx_oracle을 설치하고 작동하지만 Apache를 사용하여 CGI로 Python 코드를 실행할 때 문제가 있습니다.

예를 들어 다음 코드는 명령 줄에서 완벽하게 작동합니다.

#!/usr/bin/python 
import os 
import cx_Oracle 
import defs as df 

os.putenv('ORACLE_HOME', '/oracledb/10.2.0/') 
os.putenv('LD_LIBRARY_PATH', '/oracledb/10.2.0/lib') 

con = cx_Oracle.Connection(df.DB_USER, df.DB_PASS, df.DB_SID) 
print con

그러나 CGI로 실행하면 Apache 오류 로그에서 "CX_ORACLE.INTERFACEERROR : Oracle Environment Hands를 얻을 수 없습니다"를 얻습니다.

나는 그물을 검색했고 모두가 ORACLE_HOME 그리고 LD_LIBRARY_PATH 환경 변수. 어떻게 든 CGI 스크립트는 사용을 정의 할 때에도이 환경 변수에 액세스 할 수 없습니다. os.putenv 코드에서 볼 수 있듯이.

내가 뭘 잘못하고 있니? 감사!

도움이 되었습니까?

해결책 7

나는 문제를 해결했다.

어쨌든 Apache가 사용했던 사용자와 그룹은 환경 변수에 액세스하지 못했습니다. Apache 가이 변수에 액세스 할 수있는 사용자에게 사용하고있는 사용자와 그룹을 변경하여 문제를 해결했습니다.

Python을 사용 하여이 변수를 설정하기가 너무 어렵다는 것은 이상하고 실망 스럽습니다.

내 질문에 대답 한 모든 분들께 감사드립니다!

다른 팁

이것은 나를 위해 일하고 있습니다 :

os.putenv('ORACLE_HOME', '/oracle/client/v10.2.0.3-64bit')
os.putenv('LD_LIBRARY_PATH', '/oracle/client/v10.2.0.3-64bit/lib')
os.environ['ORACLE_HOME'] = '/oracle/client/v10.2.0.3-64bit'
os.environ['LD_LIBRARY_PATH'] = '/oracle/client/v10.2.0.3-64bit/lib'

먼저 마음에 들었습니다 putenv, 그런 다음 업데이트하십시오 environ.

당신은 이것을 필요로합니다 :

os.environ['ORACLE_HOME'] = '/oracledb/10.2.0/'
os.environ['LD_LIBRARY_PATH'] = '/oracledb/10.2.0/lib'

사용하는 대신 os.putenv() 왜냐하면 os.putenv() 업데이트되지 않습니다 os.environ, 어느 cx_Oracle 아마도보고 있습니다.

선적 서류 비치: 기타 운영 체제 인터페이스 말 : "참고 : putenv ()를 호출한다고해서 직접 os.environ이 변경되지 않으므로 os.environ을 수정하는 것이 좋습니다."

추가를 잊지 마십시오 env 아파치 모듈 :

a2enmod env

.htaccess 또는 apache 구성 :

SetEnv LD_LIBRARY_PATH /oracle_lib_path

/etc/apache2/envvars에서 작동하지 않습니다

환경 변수를 설정할 필요가 없으면 문제를 완전히 제거 할 수 있습니다. 다음은 상자에 Oracle Instant Client를 설치하여이를 수행하는 방법에 대한 메모입니다.

환경 변수를 설정하지 않고 Linux에 Oracle InstantClient 설치?

짧은 일에서 Google 문제에 대해, 당신의 문제는 결말과 관련이있을 수 있습니다. / 안에 ORACLE_HOME.
그것을 제거하고 (Richie의 제안도 사용) 작동하는지 확인하십시오.

쉘 스크립트를 사용하여 CGI를 구현하고 쉘 스크립트에서 환경 변수를 설정하고 쉘 스크립트에서 Python 스크립트를 호출 할 수 있습니다.

파이썬 내에서 환경 변수 설정은 까다로운 것 같습니다. 특히 라이브러리가로드되는 방식을 다룰 때 ...

질문자의 코드가 작동하지 않은 이유는 아직 답변되지 않았습니다.

대답은 환경 변수 LD_LIBRARY_PATH가 응용 프로그램이 시작될 때만 평가된다는 것입니다 (이 경우 Python 통역사). Python이 시작되었을 때 이미이 변수를 엉망으로 만들기에는 너무 늦었습니다. os.environ 또는 os.putenv를 사용하여 설정했는지 여부는 전혀 중요하지 않습니다 (그러나 일반적으로 전자는 사용해야합니다).

솔루션은 Python 스크립트를 시작하는 래퍼 스크립트에서 LD_LIBRARY_PATH 환경 변수를 설정하거나 해당 환경 변수가 이미 설정된 상태에서 APACHE를 시작하는 것입니다. OpenSuse에서는 예를 들어/etc/sysconfig/apache2에서 ld_library_path를 설정하여 후자를 수행 할 수 있습니다.

그건 그렇고, CGI 스크립트 대신 mod_wsgi를 사용할 때 동일한 문제가 있습니다. mod_wsgi에서 "Python Shared Library를 찾을 수 없음"섹션을 참조하십시오. 설치 문제 페이지.

당신의 진술이 순서대로 나왔습니까?

#!/usr/bin/python 
import os 
os.putenv('ORACLE_HOME', '/oracledb/10.2.0/') 
os.putenv('LD_LIBRARY_PATH', '/oracledb/10.2.0/lib') 

import cx_Oracle 
import defs as df 

con = cx_Oracle.Connection(df.DB_USER, df.DB_PASS, df.DB_SID) 
print con
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top