cx_Oracle - DLL加载失败

10 投票
2 回答
11074 浏览
提问于 2025-04-18 09:09

我在用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,但还是无法让它工作……我对这个问题做了一些研究,现在有点卡住了,我不明白为什么在我的电脑上能正常工作,而在这个远程工作站上却不行(唯一的不同是这个远程工作站是虚拟机)。

有没有人知道可能是什么问题呢?

我在我的电脑和远程工作站上都运行了Dependancy Walker,检查cx_oracle.pyd,唯一的不同是远程工作站上找不到MSVCR100和MSVCR90这两个dll。

我的环境变量设置如下:

  • C:\Oracle作为ORACLE_BASE

  • C:\Oracle\instantclient_12_1作为ORACLE_HOME

  • C:\Oracle\instantclient_12_1添加到“Path”变量中

两台机器都是64位,Windows 7

我运行的是Python 2.7.5

我把instantclient-basic-nt-12.1.0.1.0解压到了C:\Oracle\instantclient_12_1

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

在远程工作站上,sys.path给我的结果是:

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


编辑 1

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

编辑 2

基本上,我的解决办法就是重新安装所有东西(Python,Oracle Instant Client和cx_Oracle),这次是针对64位系统,而不是32位系统。

总结一下,这就是我的问题和解决方法: 1)我安装了32位Windows安装包的Cx_Oracle和32位的Oracle Instant Client,在我的64位系统上运行Python 2.7.5时一切正常。 2)我在一台虚拟机上做了完全相同的操作(同样是64位系统),但它不工作。 3)为了让它在虚拟机上工作,我重新安装了所有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 Client(在我这里是11g)。希望这能帮到你。

2 个回答

-1

在我的情况下,我只需把 ORACLE_HOME 放在 Python 之前的路径变量里,这样就能正常工作了。

4

我在Windows 7上运行Oracle Express,并使用的是64位的Python 3.5。

下面是我如何让Django 1.9连接到Oracle数据库的步骤。

  1. 我通过pip安装了cx_Oracle,命令是(pip3 install cx_Oracle),而不是从pypi网站下载msi文件。

  2. 我从这个网址(http://www.oracle.com/technetwork/topics/winx64soft-089540.html)下载了64位的Oracle即时客户端,并解压到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文件。

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

撰写回答