cx_Oracle.so: 未定义符号: PyUnicodeUCS2_AsEncodedString

6 投票
2 回答
7527 浏览
提问于 2025-04-17 05:19

我在安装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(这是我不太懂的语言,但对我有帮助)

撰写回答