繁体   English   中英

python导入错误cx_Oracle在macOS Sierra中

[英]python import error cx_Oracle in macOS Sierra

我有macOS Sierra 10.12.3,我需要通过python连接到Oracle数据库。 我按照这些说明使用pip安装了cx_Oracle。 在ipython中导入cx_Oracle时,我收到以下错误消息(Python 3.5.2 | Anaconda 4.2.0(x86_64)):

In [1]: import cx_Oracle
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-d1ecebcba3d2> in <module>()
----> 1 import cx_Oracle

ImportError: dlopen(/Users/dufoudav/anaconda/lib/python3.5/site-packages/cx_Oracle.cpython-35m-darwin.so, 2): Library not loaded: @rpath/libclntsh.dylib.12.1
    Referenced from: /Users/dufoudav/anaconda/lib/python3.5/site-packages/cx_Oracle.cpython-35m-darwin.so
        Reason: image not found

有关如何解决这个问题的任何想法?

为Python / Mac OS Sierra安装cx_Oracle

Oracle下载以下文件

instantclient-basic-macos.x64-12.1.0.2.0.zip instantclient-sdk-macos.x64-12.1.0.2.0.zip

创建目录/usr/local/lib/share/oracle

export ORACLE_HOME=/usr/local/lib/share/oracle
export VERSION=12.1.0.2.0
export ARCH=x86_64

mkdir -p $ORACLE_HOME

将Instant Client Basic和SDK复制到/usr/local/lib/share/oracle

cp instantclient-basic-macos.x64-$VERSION.zip $ORACLE_HOME
cp instantclient-sdk-macos.x64-$VERSION.zip $ORACLE_HOME

将两个文件解压缩到该目录:

cd $ORACLE_HOME
tar -xzf instantclient-basic-macos.x64-$VERSION.zip
tar -xzf instantclient-sdk-macos.x64-$VERSION.zip

/user/local/lib/share/oracle中的即时客户端文件夹中创建符号链接

cd instantclient_12_1
ln -s libclntsh.dylib.12.1 libclntsh.dylib
ln -s libocci.dylib.12.1 libocci.dylib

export DYLD_LIBRARY_PATH=$ORACLE_HOME
export LD_LIBRARY_PATH=$ORACLE_HOME

现在你可以摆脱你下载的zip文件,因为它们不再需要了

cd /usr/local/lib/share/oracle
rm instantclient-basic-macos.x64-$VERSION.zip
rm instantclient-sdk-macos.x64-$VERSION.zip

将/ instantclient_12_1之外的所有文件和文件夹移动到父目录/usr/local/lib/share/oracle

mv  -v $ORACLE_HOME/instantclient_12_1/* /$ORACLE_HOME/
rm -rf instantclient_12_1/

你现在应该可以安装cx_Oracle了。

故障排除

如果您遇到cx_Oracle.DatabaseError: ORA-21561: OID generation failed通过键入终端获取计算机的主机名

hostname

复制此值并使用您喜欢的文本编辑器将其添加到/etc/hosts文件中(在这种情况下我使用的是vi)

vi /etc/hosts

在最后有127.0.0.1 localhost的行上放一个空格并输入之前给你的主机名。 在下面,您看到MYMACSNAME,用您收到的主机名替换该部分

127.0.0.1       localhost MYMACSNAME

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM