2012-07-25 13 views
27

मैं एक पायथन 2.7.2 और ओरेकल 11 जी स्थापना के लिए cx_Oracle बनाने की कोशिश कर रहा हूं लेकिन निर्मित cx_Oracle.so libclntsh.so.11.1 नहीं ढूंढ सकता है इसलिए cx_Oracle आयात करना पाइथन विफल रहता है।समस्या निर्माण cx_Oracle - libclntsh.so.11.1 => नहीं मिला

/mypath/cx_Oracle-5.1.1/build/lib.linux-x86_64-2.7-11g]$ ldd cx_Oracle.so 
    libclntsh.so.11.1 => not found 
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ae9be290000) 
    libc.so.6 => /lib64/libc.so.6 (0x00002ae9be4ab000) 
    /lib64/ld-linux-x86-64.so.2 (0x000000389b600000) 

मैं अपने Oracle ग्राहक स्थापना निर्देशिका में libclntsh.so.11.1 है:

/apps/oracle/client/11.2.0.1/home1/lib]$ ls -l libclntsh.so* 
libclntsh.so -> /apps/oracle/client/11.2.0.1/home1/lib/libclntsh.so.11.1 
libclntsh.so.11.1 

और cx_Oracle setup.py इस lib dir उठा:

/mypath/cx_Oracle-5.1.1]$ python2.7 setup.py build 
/apps/oracle/client/11.2.0.1/home1/ 
running build 
running build_ext 
building 'cx_Oracle' extension 
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/apps/oracle/client/11.2.0.1/home1/rdbms/demo -I/apps/oracle/client/11.2.0.1/home1/rdbms/public -I/apps/bweb/python-2.7.2/include/python2.7 -c cx_Oracle.c -o build/temp.linux-x86_64-2.7-11g/cx_Oracle.o -DBUILD_VERSION=5.1.1 
In file included from /apps/oracle/client/11.2.0.1/home1/rdbms/public/oci.h:3024, 
       from cx_Oracle.c:10: 
/apps/oracle/client/11.2.0.1/home1/rdbms/public/ociap.h:10788: warning: function declaration isn't a prototype 
/apps/oracle/client/11.2.0.1/home1/rdbms/public/ociap.h:10794: warning: function declaration isn't a prototype 
gcc -pthread -shared build/temp.linux-x86_64-2.7-11g/cx_Oracle.o -L/apps/oracle/client/11.2.0.1/home1/lib -lclntsh -o build/lib.linux-x86_64-2.7-11g/cx_Oracle.so 

क्या इस सेटअप के साथ कुछ गलत है?

धन्यवाद

अद्यतन

मेरे LD_LIBRARY_PATHlibclntsh.so.11.1

$ echo $LD_LIBRARY_PATH 
/apps/oracle/client/11.2.0.1/lib 

यह कोई फर्क नहीं लगता है के साथ ऊपर lib निर्देशिका में शामिल है। मैं cx_Oracle.so फ़ाइल का पुनर्निर्माण करता हूं और यह libclntsh.so.11.1 => not found दिखाता है जब मैं $ ldd cx_Oracle.so चलाता हूं।

अजगर बनाया मॉड्यूल लोड करने में नाकाम रहने:

Python 2.7.2 (default, Jan 19 2012, 14:38:32) 
[GCC 3.4.6 20060404 (Red Hat 3.4.6-11)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import cx_Oracle 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory 

हल

मुद्दा LD_LIBRARY_PATH वातावरण चर से संबंधित था। सेटअप पर प्रतिबंधों के कारण मैं (कॉर्प एनवी) के साथ काम कर रहा हूं, मुझे cx_Oracle को किसी अन्य उपयोगकर्ता (सिस्टम खाता) के रूप में बनाना था। अर्थात मैं इस चल रहा था:

$ sudo -u username python27 setup.py build 

तो भले ही LD_LIBRARY_PATH मेरे लिए सही ढंग से स्थापित किया गया था, मेरे संस्करण का उपयोग नहीं किया गया था जब आदेश एक अन्य उपयोगकर्ता के रूप मार डाला गया था। मैं स्रोत कोड को उस स्थान पर ले जाकर सफलतापूर्वक निर्माण करने में सक्षम था जहां मेरे पास अनुमति थी और मेरे उपयोगकर्ता के रूप में निर्माण चला रहा था।

उत्तर

26

चल अजगर से पहले /apps/oracle/client/11.2.0.1/home1/lib/ अपने LD_LIBRARY_PATH वातावरण चर लिए नीचे दिए गए आदेश पर अमल टर्मिनल में जोड़ें या इसे जोड़ने के अपने .bashrc

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/apps/oracle/client/11.2.0.1/home1/lib/ 
+0

आप किस ओएस का उपयोग कर रहे हैं? कुछ यूनिक्स वितरण 'LD_LIBRARY_PATH' की बजाय' LD_LIB_PATH' का उपयोग करते हैं? आप फ़ाइल पर अनुमतियों को भी जांचना चाहेंगे और यह सुनिश्चित कर सकते हैं कि यह आपकी स्क्रिप्ट द्वारा पठनीय है। – Meitham

+1

RHEL 6. मुझे लगता है कि LD_LIBRARY_PATH सही है, लेकिन ऐसा लगता है कि इसे किसी भी कारण से cx_Oracle का निर्माण होने पर विचार नहीं किया जा रहा है। – Alex

+0

धन्यवाद। मैंने कोशिश की है और यह हल नहीं होता है। मैंने एलडी_LIBRARY_PATH सेट किया है और फिर cx_Oracle.so बनाया है। अभी भी libclntsh.so.11.1 => नहीं मिला दिखाता है। पुष्टि की है कि यह पायथन दुभाषिया में सेट है, और उपर्युक्त मुद्दे के कारण cx_Oracle लोड करने में असमर्थ हूं। समस्या cx_Oracle के निर्माण के बिंदु पर है, सही? 'os.environ [ 'LD_LIBRARY_PATH']' ' '/ apps/ओरेकल/ग्राहक/11.2.0.1/lib' ' >>> आयात cx_Oracle Traceback (सबसे हाल कॉल पिछले): फ़ाइल "", लाइन 1 , ' ' आयात त्रुटि: libclntsh.so.11.1: साझा ऑब्जेक्ट फ़ाइल नहीं खोल सकता: ऐसी कोई फ़ाइल या निर्देशिका नहीं ' – Alex

1

हां। आप अपने लोडर कैश टूल को बताना भूल गए हैं कि इसे पुस्तकालयों के लिए उस निर्देशिका में देखना आवश्यक है। उस निर्देशिका को /etc/ld.so.conf या इसी तरह की फ़ाइल में जोड़ें और ldconfig चलाएं।

+0

धन्यवाद। मैंने पहले से ही इस lib निर्देशिका को शामिल करने के लिए ** LD_LIBRARY_PATH ** सेट कर दिया है - क्या यह वही चीज़ प्राप्त करेगा? मैं /etc/ld.so.conf संपादित नहीं कर सकता हूं या विशेषाधिकार नहीं है। – Alex

+0

अभी के लिए, लेकिन आप * वास्तव में * sysadmin से बात करनी चाहिए। –

+1

फेडोरा 20 पर, LD_LIBRARY_PATH ने मेरे लिए इसे काट नहीं दिया, लेकिन /etc/ld.so.conf.d/ काम किया: echo /usr/lib/oracle/12.1/client64/lib> /etc/ld.so.conf .D/oracle.conf; ldconfig –

0

कई ओरेकल उत्पादों में oraenv स्थापित करें। यह अन्य पर्यावरण चर, LD_LIBRARY_PATH के बीच सेट करेगा, इसलिए अपने पर्यावरण को मैन्युअल रूप से सेट करने के बजाय . oraenv चलाने पर विचार करें।

0

एलडी_आरयूएन_PATH सेट करें।(LD_RUN_PATH का उपयोग लिंकर द्वारा केवल निर्दिष्ट समय पर पुस्तकालयों को देखने के लिए किया जाता है।)

अब cx_Oracle का निर्माण करें।

/mypath/cx_Oracle-5.1.1]$ export LD_RUN_PATH="/apps/oracle/client/11.2.0.1/home1/lib" 
/mypath/cx_Oracle-5.1.1]$ python2.7 setup.py build 

यह cx_Oracle आयात करते समय LD_LIBRARY_PATH की सेटिंग की आवश्यकता नहीं होगी।