Python cx_Oracle.so:未定义符号:PyUnicodeCs2_asencodeString

Python cx_Oracle.so:未定义符号:PyUnicodeCs2_asencodeString,python,cx-oracle,Python,Cx Oracle,我正在安装cx_oracle。我已安装oracle instantclient和cx\ U oracle软件包已安装oracle软件包导入cx\ U oracle时出现此错误。我正在运行Ubuntu11.10作为主机 import cx_Oracle Traceback (most recent call last): File "<console>", line 1, in <module> ImportError: /usr/lib/python2.7/dist-pa

我正在安装cx_oracle。我已安装oracle instantclient和cx\ U oracle软件包已安装oracle软件包导入cx\ U oracle时出现此错误。我正在运行Ubuntu11.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
导入cx\u Oracle
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
导入错误:/usr/lib/python2.7/dist-packages/cx_Oracle.so:未定义的符号:pyunicodecs2_asencodestring
有人知道如何解决这个问题吗


干杯

很可能您的Python安装使用了另一种unicode格式(ucs4),而cx_oracle是使用ucs2编译的

您可以安装带有unicode标志的cx_Oracle 5.0.4。这对我来说很有效,但有一些缺陷:

或者自己编译最新的cx_oracle。
(这是一种我不知道但很有用的语言)

除了@froZieglers的答案,我还补充了一句。当我来到
cx\u Oracle
页面时,已经没有“…Unicode…”变体可供下载了。幸运的是,我自己从源代码处编译它并不像我想象的那么麻烦

下面是我所做工作的总结(Ubuntu 12.04 LTS,64位):

  • 使用alien(11g、64位等)安装正确的Oracle XE客户端rpm
    • 它安装了th
      /u01/…
      ,当然,我也必须调整
      .profile
  • cx\U Oracle源tar,卸载,cd到
    • 我对Oracle上的so库执行了
      ln-s
      命令,如
      BUILD
      text文件中所述
  • 使用
    sudoaptitude安装Python-dev
  • 使用
    python setup.py build编译
  • 安装使用
    sudo python setup.by安装
    • 首次尝试失败,出现
      distutils.errors.DistutilsSetupError:找不到Oracle软件安装
    • 使用设置
      userOracleHome=“/u01/app/oracle/product/11.2.0/xe”
      os.getenv(“oracle\u HOME”)之后修补
      setup.py
    • sudo python setup.by安装
      然后工作
  • 使用
    python-c“导入cx\u Oracle”检查成功