python导入cygwin上的cx_Oracle错误

时间:2014-06-19 00:10:59

标签: python django cygwin cx-oracle

我试图从pypi源安装cx_Oracle,因为在cygwin中没有可用的端口。我确实按照http://permalink.gmane.org/gmane.comp.python.db.cx-oracle/2492中的建议进行了一些更改并修改了我的setup.py。但是,我仍然收到以下错误: -

$ python
Python 2.7.3 (default, Dec 18 2012, 13:50:09)
[GCC 4.5.3] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
/usr/lib/python2.7/site-packages/cx_Oracle-5.1.3-py2.7-cygwin-1.7.24-i686.egg/cx_Oracle.py:3: UserWa
rning: Module cx_Oracle was already imported from /usr/lib/python2.7/site-packages/cx_Oracle-5.1.3-p
y2.7-cygwin-1.7.24-i686.egg/cx_Oracle.pyc, but /home/zerog/cx_Oracle-5.1.3 is being added to sys.pat
h
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "build/bdist.cygwin-1.7.24-i686/egg/cx_Oracle.py", line 7, in <module>
  File "build/bdist.cygwin-1.7.24-i686/egg/cx_Oracle.py", line 6, in __bootstrap__
ImportError: Exec format error
>>>

如果有人可以帮我解决这个问题?

TIA。

3 个答案:

答案 0 :(得分:1)

通过指定instantclient的路径来解决此问题,如下所示:

$ export PATH=$PATH:/cygdrive/d/Tools/instantclient_11_2

(其他,可能很重要的东西):

$ echo $LD_LIBRARY_PATH
/cygdrive/d/Tools/instantclient_11_2
$ echo $ORACLE_HOME
/cygdrive/d/Tools/instantclient_11_2

现在,我得到: -

$ python
Python 2.7.3 (default, Dec 18 2012, 13:50:09)
[GCC 4.5.3] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>>

答案 1 :(得分:0)

很难单独从错误消息中确定,但我猜您在cx_Oracle中有两个不同的sys.path副本。错误消息是抱怨同一模块的不同版本已经import - 编辑。

据推测原始上游版本是在/usr/lib/python2.7/site-packages/cx_Oracle-5.1.3-py2.7-cygwin-1.7.24-i686.egg系统范围内安装的,而您修改后的版本是/home/zerog/cx_Oracle-5.1.3

如果你削减sys.path以便仅包含原始版本或仅包含修改后的版本,它是否有效?

(如果您需要经常在两个版本之间来回切换,可能需要使用virtualenv。)

答案 2 :(得分:0)

我遇到了这个错误&#34; Exec格式错误。&#34;

对我来说,这可能是由于cygwin安装为64位,但即时客户端安装为32位不匹配造成的。仔细检查一切(oracle,cygwin)是32位还是64位。

解决了我的问题:

  1. 由于我的cygwin是64位(请参阅uname -a,并查找x86_64),我从oracle的网站下载了64位即时客户端,并解压缩

  2. 我在.profile中设置env变量,指向解压缩的位置:

    export ORACLE_HOME = / cygdrive / c / oracle / instantclient_x64_11_2

    export LD_LIBRARY_PATH = $ ORACLE_HOME

    export DYLD_LIBRARY_PATH = $ ORACLE_HOME

    导出TNS_ADMIN =&#39; //可选/路径/到/你的/ oracle / tns / files /&#39;

  3. source~ / .profile

  4. 要进行测试,您现在应该可以运行此python命令而不会出现错误:

    导入cx_Oracle

  5. 要验证路径是否正确,如果您运行ls,您应该会看到类似

    的内容

    ls $ ORACLE_HOME

    adrci.exe     genezi.exe  oci.sym        ociw32.dll  ojdbc6.jar          
    oraocci11.dll   oraociei11.sym  uidrvci.exe  vc9
    adrci.sym     genezi.sym  ocijdbc11.dll  ociw32.sym  orannzsbb11.dll  
    oraocci11.sym   orasql11.dll    uidrvci.sym  xstreams.jar
    BASIC_README  oci.dll     ocijdbc11.sym  ojdbc5.jar  orannzsbb11.sym
    oraociei11.dll  orasql11.sym    vc8