cx_Oracle.so: 未定义符号: PyUnicodeUCS2_AsEncodedString
我在安装cx_oracle的时候遇到了一些问题。我已经安装了Oracle的instantclient和cx_oracle包,但在导入cx_oracle的时候出现了错误。我现在是在Ubuntu 11.10系统上操作。
import cx_Oracle
Traceback (most recent call last):
File "<console>", line 1, in <module>
ImportError: /usr/lib/python2.7/dist-packages/cx_Oracle.so: undefined symbol:PyUnicodeUCS2_AsEncodedString
有没有人知道怎么解决这个问题呢?
谢谢!
2 个回答
1
除了@froZieglers的回答之外,当我去查看cx_Oracle
的页面时,发现已经没有可以下载的“...Unicode...”版本了。幸运的是,自己从源代码编译并没有我想象中那么麻烦。
以下是我所做的步骤总结(Ubuntu 12.04 LTS,64位):
- 使用alien安装合适的Oracle XE客户端rpm(11g,64位等...)
- 它会安装到
/u01/...
,当然我还需要调整.profile
文件。
- 它会安装到
- 下载 cx_Oracle源代码压缩包,解压后进入文件夹
- 我按照
BUILD
文本文件中的说明,对Oracle的so库执行了ln -s
命令。
- 我按照
- 使用
sudo aptitude install python-dev
安装Python头文件 - 用
python setup.py build
进行编译 - 用
sudo python setup.py install
进行安装- 第一次尝试失败,出现了
distutils.errors.DistutilsSetupError: cannot locate an Oracle software installation
的错误。 - 我在
setup.py
中添加了userOracleHome = "/u01/app/oracle/product/11.2.0/xe"
,放在os.getenv("ORACLE_HOME")
之后。 - 然后再次执行
sudo python setup.py install
就成功了。
- 第一次尝试失败,出现了
- 用
python -c 'import cx_Oracle'
检查,成功导入。
3
很可能你的Python安装使用了另一种unicode格式(ucs4),而cx_oracle是用ucs2编译的。
你可以安装带有unicode标志的cx_Oracle 5.0.4。这对我有效,但有一个小问题:奇怪的Oracle错误:“无效的格式文本”
或者你可以自己编译最新的cx_oracle。http://mrpolo.com.ve/?p=178(这是我不太懂的语言,但对我有帮助)