Python3 无法加载 cx-Oracle Oracle Client 库:"libclntsh.so" Linux
Python3 cx-Oracle Oracle Client library cannot be loaded: "libclntsh.so" on Linux
我通过搜索找到了类似的问题。但是,以前的解决方案似乎以 Windows 为中心,而不是 Linux.
1) Python 版本: Python 3.4.6
2) OS 版本:Linux SLES 12.3
3) Oracle 数据库版本:11.2
4) Oracle 客户端:64 位 11.2 即时客户端,cx-Oracle 6.4.1
5) 李白:
S | Name | Summary | Type
---+---------------+------------------------------------------------------------+--------
i+ | libaio-devel | Development Files for Linux-native Asynchronous I/O Access | package
i | libaio1 | Linux-Native Asynchronous I/O Access Library | package
| libaio1-32bit | Linux-Native Asynchronous I/O Access Library | package
6) Oracle 客户端位置:/opt/pyora/oracle_11.2/instantclient_11_2
drwxrwxrwx 1 virtual wheel 346 Oct 23 07:48 .
drwxrwxrwx 1 virtual wheel 124 Oct 23 07:47 ..
-rwxrwxrwx 1 virtual wheel 25420 Aug 24 2013 adrci
-rwxrwxrwx 1 virtual wheel 449 Aug 24 2013 BASIC_LITE_README
-rwxrwxrwx 1 virtual wheel 439 Aug 24 2013 BASIC_README
-rwxrwxrwx 1 virtual wheel 47860 Aug 24 2013 genezi
-rwxrwxrwx 1 virtual wheel 53865194 Oct 22 16:44 libclntsh.so
-rwxrwxrwx 1 virtual wheel 53865194 Aug 24 2013 libclntsh.so.11.1
-rwxrwxrwx 1 virtual wheel 7996693 Aug 24 2013 libnnz11.so
-rwxrwxrwx 1 virtual wheel 1973074 Aug 24 2013 libocci.so.11.1
-rwxrwxrwx 1 virtual wheel 118738042 Aug 24 2013 libociei.so
-rwxrwxrwx 1 virtual wheel 9897206 Aug 24 2013 libociicus.so
-rwxrwxrwx 1 virtual wheel 164942 Aug 24 2013 libocijdbc11.so
-rwxrwxrwx 1 virtual wheel 2091135 Aug 24 2013 ojdbc5.jar
-rwxrwxrwx 1 virtual wheel 2739616 Aug 24 2013 ojdbc6.jar
-rwxrwxrwx 1 virtual wheel 192365 Aug 24 2013 uidrvci
-rwxrwxrwx 1 virtual wheel 66779 Aug 24 2013 xstreams.jar
7) 下面的代码设置环境变量并尝试建立连接:([=66=] 来自 python interactive shell)
from base64 import b64encode, b64decode # used for excoding/decoding base64 data
from toml import load as toml_load # used to retreive config file data
import cx_Oracle # used for accessing the Oracle databases
import os
import re
import sys
def decode_data(data):
return b64decode(data).decode('ascii')
path = os.environ["PATH"]
os.environ["PATH"] = "/opt/pyora/oracle_11.2/instantclient_11_2:" + path
os.environ["LD_LIBRARY_PATH"] = "/opt/pyora/oracle_11.2/instantclient_11_2"
os.environ["ORACLE_HOME"] = "/opt/pyora/oracle_11.2/instantclient_11_2"
os.environ["ORACLE_BASE"] = "/opt/pyora/oracle_11.2/instantclient_11_2"
username = decode_data("***")
password = decode_data("***")
hostname=decode_data("***")
port=decode_data("***")
schema=decode_data("***")
dsn ="{hostname}:{port}/{schema}".format(hostname=hostname,port=port,schema=schema)
print("PATH="+os.environ["PATH"]+"\n")
print("LS_LIBRARY_PATH="+os.environ["LD_LIBRARY_PATH"]+"\n")
print("ORACLE_HOME="+os.environ["ORACLE_HOME"]+"\n")
print("ORACLE_BASE="+os.environ["ORACLE_BASE"]+"\n")
dconn = cx_Oracle.connect(user=username,password=password,dsn=dsn)
8) 以下是收到的错误:
标准用户 -
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help
Sudo 用户 -(导入后立即 cx_Oracle)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libnnz11.so: cannot open shared object file: No such file or directory
我已按照错误消息中找到的 link 的说明进行操作,但没有任何帮助。
https://oracle.github.io/odpi/doc/installation.html#linux
我确实验证了各个部分的架构:
Oracle 即时客户端:
instantclient-basic-linux.x64-11.2.0.4.0.zip
libaio:
libaio-devel-0.3.109-17.15.x86_64
libaio1-0.3.109-17.15.x86_64
Python 3:
Python 3.4.6 (default, Mar 01 2017, 16:52:22) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import platform
>>> platform.architecture()
('64bit', 'ELF')
>>>
在启动您的应用程序之前设置库搜索路径。我建议使用 ldconfig
,如 ODPI-C 安装 link 和实际 cx_Oracle installation doc.
所示
对于 Instant Client,请勿设置 ORACLE_HOME 或 ORACLE_BASE。为什么要在应用程序内部设置 PATH?
我还建议使用 Instant Client 18.3,它可以连接到 Oracle Database 11.2 以上版本。
我通过搜索找到了类似的问题。但是,以前的解决方案似乎以 Windows 为中心,而不是 Linux.
1) Python 版本: Python 3.4.6
2) OS 版本:Linux SLES 12.3
3) Oracle 数据库版本:11.2
4) Oracle 客户端:64 位 11.2 即时客户端,cx-Oracle 6.4.1
5) 李白:
S | Name | Summary | Type
---+---------------+------------------------------------------------------------+--------
i+ | libaio-devel | Development Files for Linux-native Asynchronous I/O Access | package
i | libaio1 | Linux-Native Asynchronous I/O Access Library | package
| libaio1-32bit | Linux-Native Asynchronous I/O Access Library | package
6) Oracle 客户端位置:/opt/pyora/oracle_11.2/instantclient_11_2
drwxrwxrwx 1 virtual wheel 346 Oct 23 07:48 .
drwxrwxrwx 1 virtual wheel 124 Oct 23 07:47 ..
-rwxrwxrwx 1 virtual wheel 25420 Aug 24 2013 adrci
-rwxrwxrwx 1 virtual wheel 449 Aug 24 2013 BASIC_LITE_README
-rwxrwxrwx 1 virtual wheel 439 Aug 24 2013 BASIC_README
-rwxrwxrwx 1 virtual wheel 47860 Aug 24 2013 genezi
-rwxrwxrwx 1 virtual wheel 53865194 Oct 22 16:44 libclntsh.so
-rwxrwxrwx 1 virtual wheel 53865194 Aug 24 2013 libclntsh.so.11.1
-rwxrwxrwx 1 virtual wheel 7996693 Aug 24 2013 libnnz11.so
-rwxrwxrwx 1 virtual wheel 1973074 Aug 24 2013 libocci.so.11.1
-rwxrwxrwx 1 virtual wheel 118738042 Aug 24 2013 libociei.so
-rwxrwxrwx 1 virtual wheel 9897206 Aug 24 2013 libociicus.so
-rwxrwxrwx 1 virtual wheel 164942 Aug 24 2013 libocijdbc11.so
-rwxrwxrwx 1 virtual wheel 2091135 Aug 24 2013 ojdbc5.jar
-rwxrwxrwx 1 virtual wheel 2739616 Aug 24 2013 ojdbc6.jar
-rwxrwxrwx 1 virtual wheel 192365 Aug 24 2013 uidrvci
-rwxrwxrwx 1 virtual wheel 66779 Aug 24 2013 xstreams.jar
7) 下面的代码设置环境变量并尝试建立连接:([=66=] 来自 python interactive shell)
from base64 import b64encode, b64decode # used for excoding/decoding base64 data
from toml import load as toml_load # used to retreive config file data
import cx_Oracle # used for accessing the Oracle databases
import os
import re
import sys
def decode_data(data):
return b64decode(data).decode('ascii')
path = os.environ["PATH"]
os.environ["PATH"] = "/opt/pyora/oracle_11.2/instantclient_11_2:" + path
os.environ["LD_LIBRARY_PATH"] = "/opt/pyora/oracle_11.2/instantclient_11_2"
os.environ["ORACLE_HOME"] = "/opt/pyora/oracle_11.2/instantclient_11_2"
os.environ["ORACLE_BASE"] = "/opt/pyora/oracle_11.2/instantclient_11_2"
username = decode_data("***")
password = decode_data("***")
hostname=decode_data("***")
port=decode_data("***")
schema=decode_data("***")
dsn ="{hostname}:{port}/{schema}".format(hostname=hostname,port=port,schema=schema)
print("PATH="+os.environ["PATH"]+"\n")
print("LS_LIBRARY_PATH="+os.environ["LD_LIBRARY_PATH"]+"\n")
print("ORACLE_HOME="+os.environ["ORACLE_HOME"]+"\n")
print("ORACLE_BASE="+os.environ["ORACLE_BASE"]+"\n")
dconn = cx_Oracle.connect(user=username,password=password,dsn=dsn)
8) 以下是收到的错误: 标准用户 -
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help
Sudo 用户 -(导入后立即 cx_Oracle)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libnnz11.so: cannot open shared object file: No such file or directory
我已按照错误消息中找到的 link 的说明进行操作,但没有任何帮助。 https://oracle.github.io/odpi/doc/installation.html#linux
我确实验证了各个部分的架构:
Oracle 即时客户端: instantclient-basic-linux.x64-11.2.0.4.0.zip
libaio:
libaio-devel-0.3.109-17.15.x86_64
libaio1-0.3.109-17.15.x86_64
Python 3:
Python 3.4.6 (default, Mar 01 2017, 16:52:22) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import platform
>>> platform.architecture()
('64bit', 'ELF')
>>>
在启动您的应用程序之前设置库搜索路径。我建议使用 ldconfig
,如 ODPI-C 安装 link 和实际 cx_Oracle installation doc.
对于 Instant Client,请勿设置 ORACLE_HOME 或 ORACLE_BASE。为什么要在应用程序内部设置 PATH?
我还建议使用 Instant Client 18.3,它可以连接到 Oracle Database 11.2 以上版本。