cx_Oracle - DLL加载失败

时间:2014-06-09 16:01:16

标签: python dll importerror cx-oracle

我在使用Python导入cx_Oracle时遇到问题。我知道cx_Oracle存在很多问题,但在阅读完所有相关主题后,我似乎无法找到解决问题的方法。

我有两台机器,一台是我的电脑,另一台是远程工作站,它有类似的配置(Windows 7,64位)。我需要在远程工作站上安装cx_Oracle但它不起作用,而它在我的计算机上工作正常(我可以成功导入模块并连接到我的数据库)。在远程工作站上,我有以下错误:

Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
  import cx_Oracle
ImportError: DLL load failed: The specified module could not be found.

我已经仔细检查了我的环境变量,并且我重新安装了cx_Oracle几次,但我无法让它工作......我对这个问题进行了一些研究,我有点被困在这里,我不知道理解为什么它在我的计算机上工作正常而不是在这个远程工作站上(唯一的区别是这个远程工作站是一个VM)。

有没有人知道可能出现什么问题?

在cx_oracle.pyd上运行Dependancy Walker(在我的计算机上工作正常并且在cx_oracle不起作用的远程工作站上),唯一的区别是我的远程工作站上找不到的dll MSVCR100和MSVCR90。 / p>

我有以下环境变量设置:

  • C:\Oracle as ORACLE_BASE

  • C:\Oracle\instantclient_12_1作为ORACLE_HOME

  • C:\Oracle\instantclient_12_1添加到&#34;路径&#34;变量

两台机器都是64位,Windows 7

我正在运行Python 2.7.5

我在C:\Oracle\instantclient_12_1

中解压缩了instantclient-basic-nt-12.1.0.1.0

我安装了cx_Oracle-5.1.2-11g.win32-py2.7s

在远程工作站上,sys.path给了我:

  

&#39; C:\ Python27 \ Lib \ idlelib&#39;,&#39; C:\ Windows \ system32 \ python27.zip&#39;,&#39; C:\ Python27 \ DLLs&#39; ,&#39; C:\ Python27 \ lib&#39;,&#39; C:\ Python27 \ lib \ plat-win&#39;,&#39; C:\ Python27 \ lib \ lib-tk&#39; ,&#39; C:\ Python27&#39;,&#39; C:\ Python27 \ lib \ site-packages&#39;


编辑1

在上一篇文章中,所有文件(Python 2.7,cx_Oracle包,Oracle Instant Client)都是针对32位系统的。 我为64位系统下载了相同版本的文件,现在我的远程工作站上的一切正常。

编辑2

基本上,修复包括重新安装64位系统而不是32位系统的所有内容(Python,Oracle Instant Client和cx_Oracle)。

总结一下,这是我的问题以及它是如何修复的: 1)我安装了Cx_Oracle(来自32位Windows安装包)和Oracle Instant Client(32位),它在我的64位系统上运行完美,运行python 2.7.5用于32位系统 2)我在虚拟机(也运行64位系统)上完全做了同样的事情,但它无法正常工作 3)为了让它在VM上工作,我重新安装了64位系统的所有东西(python,Instant Client,Cx_Oracle),它终于工作了

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html http://sourceforge.net/projects/cx-oracle/files/5.1.2/

此外,请确保下载与您的数据库版本对应的cx_Oracle和Instant客户端(在我的情况下为11g)。 希望这会有所帮助。

2 个答案:

答案 0 :(得分:4)

我在win 7和python35(64位)上运行Oracle express。

这就是我设法让我的django-1.9连接到oracle的方式。

  1. 使用pip(pip3 install cx_Oracle)安装cx_Oracle,而不是从pypi网站下载msi。

  2. 从(http://www.oracle.com/technetwork/topics/winx64soft-089540.html)下载Oracle即时客户端64位版本并解压缩到c:\ oraclexe(只是为了将所有oracle内容保存在一个地方)

  3. 在环境变量下创建:

    set ORACLE_BASE=C:\oraclexe set ORACLE_HOME=C:\oraniclexe\app\oracle\product\11.2.0\server set PATH=C:\oraclexe\instantclient_11_2;%PATH%

  4. 更新了我的django settings.py

  5. DATABASES = { 'default':{ 'ENGINE':'django.db.backends.oracle' 'NAME':'XE', 'USER':'hr', 'PASSWORD':'hr', 'HOST':'localhost', 'PORT':'1521', }, } 就是这样。之后,我的django迁移工作正常

答案 1 :(得分:-1)

在我的情况下,我只是在路径变量中移动Python之前的ORACLE_HOME,它对我有用。