我试图从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。
答案 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位。
解决了我的问题:
由于我的cygwin是64位(请参阅uname -a
,并查找x86_64),我从oracle的网站下载了64位即时客户端,并解压缩
我在.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;
source~ / .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