Cx_Oracle: ImportError: Ошибка загрузки DLL: это приложение не выполнено

Вот что я сделал:

  • Я нахожусь в Windows XP SP3
  • У меня уже установлен Python 2.7.1.
  • Я загрузил instantclient-basic-nt-11.2.0.3.0.zip, разархивировал его и поместил в C:\Program Files\Oracle\instantclient_11_2.
  • Я добавил этот путь к переменной среды Windows Path.
  • Я создал новую переменную среды ORACLE_HOME, удерживая этот путь как свое значение.
  • Я установил cx_Oracle-5.1.2-11g.win32-py2.7.msi.

И при запуске import cx_Oracle все, что я получаю, это

Traceback (most recent call last): 
  File "<string>", line 2, in <module> 
ImportError: DLL load failed: This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

Я, очевидно, удалил/переустановил cx_Oracle пару раз, но на самом деле ничего не помогает. Может ли кто-нибудь объяснить, как это исправить?

UPDATE

Я запустил Dependency Walker, и у него много проблем. Однако первый отсутствующий .dll(msvcr80.dll) на самом деле присутствует в C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.91_x-ww_0de56c07.

enter image description here

Ответы

Ответ 1

ОК, что, наконец, решило проблему (не уверен, нужны ли все шаги и не знаю, почему именно это и только это сработало до сих пор):

  • Загрузите и распакуйте версию 12 из здесь.
  • Добавьте " ORACLE_HOME" в качестве переменной среды Windows и установите для нее значение ...\instantclient_12_1 (не содержащая ее папка!).
  • Добавьте этот же путь к переменной окружения Path.
  • Только сейчас установите cx_Oracle.

Ответ 2

Чтобы помочь другим людям с одинаковой проблемой:

Эта ошибка сообщает о несоответствии 32-64 бит между некоторыми DLL при импорте модуля. Возможности:

  • Разная архитектура Python и cx_Oracle (менее вероятно, поскольку cx_Oracle установщик на Windows предупреждает вас, если не подходит Python не найден).
  • Различные архитектуры библиотек cx_Oracle и oci.dll(более вероятно).

Имейте в виду, что cx_Oracle использует стандартный клиент Oracle (на уровне OCI), который должен быть установлен на вашем компьютере. Он ищет oci.dll в нескольких местах, включая PATH. Если он обнаружил oci.dll неправильной версии клиента, появляется ошибка.

Если вы получите этот путь проверки ошибок в переменной окружения PATH. Вероятно, он содержит путь к папке BIN неправильной версии клиента Oracle. Если у вас несколько клиентов, укажите в PATH соответствующий или установите соответствующий клиент.

ПРИМЕЧАНИЕ. ORACLE_HOME не влияет на cx_Oracle. В моем случае помогло только изменение PATH. Я думаю, что решение Ruben работает из-за элемента 3 ( "Добавьте этот же путь к переменной среды" Путь ").

Ответ 3

Я использую python35 64 бит и oracle express на win 7 (64 бит). Я установил cx_Oracle, используя pip3 (pip3 install cx_Oracle) вместо загрузки установщика из pypi.

Я столкнулся с той же проблемой.

Я решил это, следуя приведенным выше рекомендациям, но вместо 32-битного клиента я загрузил 64-битную версию мгновенного клиента (instantclient-basic-windows.x64-11.2.0.4.0.zip) из http://www.oracle.com/technetwork/topics/winx64soft-089540.html.

Затем я извлек его в c:\oraclexe. И добавил эти переменные среды

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

И запустил мои команды переноса django:
  python manage.py migrate

Он отлично работал

Ответ 4

Простой способ:

  • Убедитесь, что вы установили cx-Oracle, у меня есть cx_Oracle-5.1.3-11g.win32-py2.7.exe
  • Загрузите, распакуйте instantclient_12_1 и переместите его на C:\Python27
  • Добавить переменную среды C:\Python27\instantclient_12_1
  • Перезагрузите компьютер.

Ответ 5

Тот же ImportError для установки:

  • Windows 10 x64
  • Oracle Instant Client 12_1 x64
  • Python 2.7.11 x64
  • cx_Oracle cx_Oracle-5.2-12c.win-amd64-py2.7

Я решил, что он копирует файл msvcr100.dll в <oracle_instant_client_dir>

Ответ 6

Если эта проблема также возникла, и импортирование cx_Oracle (по крайней мере, по версии 5.1.2) завершится неудачно (с той же ошибкой), если у вас есть недопустимые/недостижимые UNC-пути перед Oracle в переменной среды PATH.

Исправление пути UNC (которое не было связано с Oracle) разрешило проблему.

Ответ 7

Если вы используете conda в качестве диспетчера пакетов, один из способов преодоления DLL-проблемы заключается в том, чтобы установить oracle-instantclient, выполнив conda install oracle-instantclient. Это фиксировало зависимость, которую я не смог исправить, вручную установив мгновенный клиент Oracle.

Ответ 8

Как уже во второй раз я пришел к этому вопросу, я чувствую необходимость опубликовать то, что я сделал:

Я использую:

  • Win 8 64 бит
  • Python 2.7

Я не успел установить Python и cx_Oracle 64 бит.

Он работал только тогда, когда я пробовал 32-битные версии и следил за инструкциями @rob answer

Ответ 9

У меня была такая же проблема с загрузкой DLL на моем компьютере с Windows. установленный клиент oracle, установить переменные, запустить файл cx_Oracle-5.1.3-11g.win32-py2.7.exe.

однако, когда я установил cx_Oracle с easy_setup, он исправил проблему.

C:\Python27\Scripts\easy_install.exe cx_Oracle-5.1.3-11g.win32-py2.7.exe

Ответ 10

Шаги, которые я выполнил:

  • Скачан смарт-клиент instantclient-basic-windows.x64-12.1.0.2.0.zip

  • Извлечен и скопирован в # ваш каталог #\instantclient_12_1

    Выше каталога содержит dll

  • Добавить переменную PATH С#your directory #\instantclient_12_1 и создать переменную env ORACLE_HOME = # ваш каталог #\instantclient_12_1

  • Загрузите и установите cx_Oracle-5.2.1-11g.win-amd64-py2.7.exe

  • Открыть импорт типа бездействия cx_Oracle

Ответ 11

если вы используете Anaconda в Windows, попробуйте:

conda install cx_oracle

на вашем cmd

- > this