cygwin上的python导入cx_Oracle错误

cygwin上的python导入cx_Oracle错误,python,django,cygwin,cx-oracle,Python,Django,Cygwin,Cx Oracle,我试图从pypi源代码安装cx_Oracle,因为cygwin中没有可用的端口。我确实按照中的建议进行了一些更改,并修改了我的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. >>> im

我试图从pypi源代码安装cx_Oracle,因为cygwin中没有可用的端口。我确实按照中的建议进行了一些更改,并修改了我的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
>>>
$python
Python 2.7.3(默认值,2012年12月18日,13:50:09)
[GCC 4.5.3]关于cygwin
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入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
警告:模块cx_Oracle已从/usr/lib/python2.7/site-packages/cx_Oracle-5.1.3-p导入
y2.7-cygwin-1.7.24-i686.egg/cx_Oracle.pyc,但是/home/zerog/cx_Oracle-5.1.3正在添加到sys.pat中
H
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“build/bdist.cygwin-1.7.24-i686/egg/cx_Oracle.py”,第7行,在
文件“build/bdist.cygwin-1.7.24-i686/egg/cx_Oracle.py”,第6行,在引导程序中__
ImportError:Exec格式错误
>>>
如果有人能帮我解决这个问题


TIA.

很难仅从错误消息中确定,但我猜您的
系统路径中有两个不同的
cx\u Oracle
副本。错误消息抱怨已导入相同模块的不同版本

大概原始的上游版本安装在系统范围内的
/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

如果您缩减系统路径,只包含原始版本或修改后的版本,是否有效


(如果需要在两个版本之间频繁切换,您可能需要使用
virtualenv

通过如下指定instantclient的路径修复了此问题:

$ export PATH=$PATH:/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
>>>
我遇到了这个错误“Exec格式错误”

对我来说,这可能是由于cygwin安装为64位,而instant client安装为32位之间不匹配造成的。仔细检查所有内容(oracle、cygwin)是否为32位或64位

是什么解决了我的问题:

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

  • 我将.profile中的env vars设置为解压缩的位置:

    导出ORACLE\u HOME=/cygdrive/c/ORACLE/instantclient\u x64\u 11\u 2

    导出LD_库_路径=$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
    
    导出动态库路径=$ORACLE\U 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
    
    导出TNS_ADMIN='//可选/path/到/your/oracle/TNS/files/'

  • 源~/.profile

  • 要进行测试,您现在应该能够无错误地运行此python命令:

    导入cx_Oracle

  • 要验证路径是否正确,如果运行
    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
    

    我不知道为什么要“添加”修改后的版本。有什么建议如何“削减系统路径”吗?基本上,我从源文件夹/home/zerog/cx_Oracle-5.1.3构建了cx_Oracle,安装的egg位于py2.7站点软件包文件夹中。如何将cx_Oracle从src文件夹(/home/zerog/cx_Oracle-5.1.3)安装到virtualenv(例如,/foo/bar/env/lib/python2.7/site软件包)中库文件夹?我将cd'ed到另一个目录并获得以下输出:-
    $python python 2.7.3(默认值,2012年12月18日,13:50:09)[GCC 4.5.3]在cygwin上键入“帮助”、“版权”、“信用证”或“许可证”以获取更多信息。>>导入cx_Oracle回溯(上次调用):文件“build/bdist.cygwin-1.7.24-i686/egg/cx_Oracle.py”第7行文件“build/bdist.cygwin-1.7.24-i686/egg/cx_Oracle.py”第6行文件“build/bdist.cygwin.cygwin-1.7.24-i686/egg/cx_Oracle.py”导入错误:Exec格式错误>>
    我也看到了这个错误,但我有路径,Oracle\u HOME,TNS\u ADMIN,以及在.profile中设置的LD_LIBRARY_路径(使用cygwin路径,安装了32位oracle客户端)。你还做了其他的改变吗?我使用的是稍新的版本(Python 2.7.5、GCC 4.8.1)。我可以运行setup.py并进行编译(必须删除对-mno cygwin的引用),但我无法导入模块。您能否在尝试导入时给出控制台错误的日志?此外,请检查oracle instant client的版本。您还需要对文件系统中的文件或环境变量进行本地更改吗?此外,您可以检查必要的文件权限和文件所有者。您是否可以共享setup.py或您更改的任何其他文件,我可以检查差异(如果有)…此外,请检查您是否使用windows安装程序安装了python,或者是否从cygwin安装了python。我的基于windows的系统上只安装了cygwin python。当然,您可以选择使用
    virtualenv
    进行分类,谢谢!我将研究这些选项。目前我已经通过cygwin安装了python。。。这可能就是问题所在。看起来这解决了问题…我尝试了python的Windows安装:)
    easy\u install cx\u Oracle
    适用于二进制安装<代码>pip
    要求visual studio。