Ошибка 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, которые не найдены на моей удаленной рабочей станции.

У меня есть следующие настройки переменных среды:

  • C:\Oracle as ORACLE_BASE

  • C:\Oracle\instantclient_12_1 как ORACLE_HOME

  • C:\Oracle\instantclient_12_1 добавлен в переменную "Путь"

Обе машины 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 в переменной пути, и он работает для меня.