यह El Capitan में सिस्टम इंटीग्रिटी प्रोटेक्शन (SIP) परिवर्तनों से संबंधित है, जो अन्य बातों के अलावा DYLD_LIBRARY_PATH को उत्पन्न प्रक्रियाओं द्वारा इनहेरिट होने से रोकता है।
आप cx_Oracle.so
. को संशोधित कर सकते हैं खोजे गए पथ के बजाय Oracle क्लाइंट लाइब्रेरी के वास्तविक पथ का उपयोग करने के लिए पुस्तकालय जो अब काम नहीं करता है; सुनिश्चित करें कि आपके पास ORACLE_HOME
है अभी भी आपके वास्तविक तत्काल ग्राहक स्थान को इंगित करने के लिए सेट है, और यह भी ध्यान दें कि ImportError
द्वारा रिपोर्ट किया गया सटीक पथ इस्तेमाल किया जाना चाहिए - 3071542110
आपके द्वारा इंस्टॉल किए गए तत्काल क्लाइंट के संस्करण/निर्माण के आधार पर मूल्य भिन्न हो सकते हैं:
export ORACLE_HOME=/usr/local/lib/share/oracle/installclient_11_2
install_name_tool -change \
/ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 \
$ORACLE_HOME/libclntsh.dylib.11.1 \
/Library/Python/2.7/site-packages/cx_Oracle.so
... लेकिन फिर वह पुस्तकालय दूसरा Oracle नहीं ढूंढ सकता:
ImportError: dlopen(/Library/Python/2.7/site-packages/cx_Oracle.so, 2): Library not loaded: /ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib
Referenced from: /usr/local/lib/share/oracle/installclient_11_2/libclntsh.dylib.11.1
Reason: image not found
तो आपको उस पुस्तकालय को भी बदलना होगा, जिसके साथ आप कम सहज महसूस कर सकते हैं:
install_name_tool -change \
/ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib \
$ORACLE_HOME/libnnz11.dylib \
$ORACLE_HOME/libclntsh.dylib.11.1
सटीक क्लाइंट संस्करण/बिल्ड के आधार पर आपको उस कमांड को चलाने से पहले फ़ाइल को लिखने योग्य बनाने की आवश्यकता हो सकती है:
chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1
उन परिवर्तनों के साथ मैं cx_Oracle
. चला सकता हूँ एल कैपिटन पर परीक्षण।
install_name_change
के बारे में अधिक जानें यहाँ।
ऐसा लगता है कि 12c इंस्टेंट क्लाइंट को इस तरह से बनाया गया है जो इस समस्या से बचा जाता है, इसलिए उस पर अपग्रेड करना 11g फ़ाइलों को हैक करने की तुलना में आसान है।