Ошибка cx_Oracle - DLL
У меня проблема с импортом cx_Oracle с Python. Я знаю, что многие проблемы с 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(на моем компьютере, где он работает нормально, и на удаленной рабочей станции, где cx_oracle не работает), единственное отличие - это dll MSVCR100 amd MSVCR90, которые не найдены на моей удаленной рабочей станции.
У меня есть следующие настройки переменных среды:
Обе машины 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) были для 32-битных систем.
Я загрузил ту же версию этих файлов для 64-битных систем, и теперь все отлично работает на моей удаленной рабочей станции.
EDIT 2
В основном, исправление состояло в том, что я переустанавливал все (Python, Oracle Instant Client и cx_Oracle) для 64-битных систем вместо 32-разрядных систем.
Подводя итог, это была моя проблема и как она была исправлена:
1) Я установил Cx_Oracle (из 32-битного установочного пакета Windows) и Oracle Instant Client (32-разрядный), и он отлично работал на моей 64-битной системе, работающей на python 2.7.5 для 32-битных систем
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, соответствующий вашей версии БД (в моем случае 11g).
Надеюсь, это поможет.
Ответы
Ответ 1
Я запускаю Oracle express на win 7 и python35 (64 бит).
Вот как мне удалось подключить django-1.9 к оракулу.
-
Установлен cx_Oracle с помощью pip (pip3 install cx_Oracle
) вместо загрузки msi с сайта pypi.
-
Загрузила 64-битную версию Oracle мгновенного клиента Oracle (http://www.oracle.com/technetwork/topics/winx64soft-089540.html) и извлечена в c:\oraclexe (просто чтобы сохранить все оракул в одном месте)
-
Создано ниже переменных среды:
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%
-
Обновлено мое django settings.py
DATABASES = {
'default':{
'ENGINE':'django.db.backends.oracle'
'NAME':'XE',
'USER':'hr',
'PASSWORD':'hr',
'HOST':'localhost',
'PORT':'1521',
},
}
Это. После этого мои миграции django работали нормально
Ответ 2
В моем случае я просто перемещаю ORACLE_HOME перед Python в переменной пути, и он работает для меня.