cx_Oracle: ImportError: сбой загрузки DLL: сбой этого приложения

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

  1. Я на Windows XP SP3
  2. У меня уже был установлен Python 2.7.1.
  3. Я скачал instantclient-basic-nt-11.2.0.3.0.zip, разархивировал и вставил в C:\Program Files\Oracle\instantclient_11_2.
  4. Я добавил этот путь в переменную среды Windows Path.
  5. Я создал новую переменную окружения ORACLE_HOME, которая содержит этот путь в качестве значения.
  6. Я установил 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, но на самом деле ничего не помогает. Может ли кто-нибудь подсказать, как это исправить?

ОБНОВЛЕНИЕ

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

введите здесь описание изображения


person RubenGeert    schedule 23.11.2013    source источник


Ответы (12)


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

  • Загрузите и разархивируйте версию 12 с здесь.
  • Добавьте «ORACLE_HOME» в качестве переменной среды Windows и установите для нее значение ...\instantclient_12_1 (не папка, содержащая ее!).
  • Добавьте этот же путь в переменную среды "Path".
  • Только сейчас установите cx_Oracle.
person RubenGeert    schedule 25.11.2013
comment
Мне не нужно было добавлять ORACLE_HOME. Я извлек мгновенный клиент в c:\Python, а затем добавил C:\Python27\instantclient_11_2 в путь. Спасибо Рубен! - person user584583; 12.06.2014
comment
Просто чтобы добавить то, что я только что нашел. Требуется перезагрузка в Windows! - person Alfabravo; 06.01.2015
comment
У меня уже были установлены ORACLE_HOME и cx_Oracle, но их не было в PATH. Я просто добавил %ORACLE_HOME% к пути, и он начал работать. Спасибо! - person Rodrigo; 28.08.2015

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

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

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

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

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

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

person greatvovan    schedule 22.07.2014
comment
Согласен, в моем случае ORACLE_HOME тоже не нужен. Моя установка: 64-битная Win, 64-битный Python 3.4 (через Anaconda), с cx_Oracle, установленным через Conda, но затем просто сбрасывающий извлеченный клиент InstantClient в произвольное место на диске C: и добавляющий его в PATH (как это сделали другие выше и ниже). В тот момент это работало нормально. - person Neil; 01.02.2016

Я использую 64-битный Python35 и 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

Это сработало отлично

person Jaya Nandan    schedule 23.12.2015

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

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

То же самое ImportError произошло для настройки:

  • Виндовс 10 х64
  • Мгновенный клиент Oracle 12_1 x64
  • Питон 2.7.11 x64
  • cx_Oracle cx_Oracle-5.2-12c.win-amd64-py2.7

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

person Sergey Stepanov    schedule 17.12.2015

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

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

person jasonobrien    schedule 06.01.2017
comment
Что такое путь UNC? - person Chris Nielsen; 01.12.2017
comment
UNC-путь — это путь, не включающий букву диска, например \\server\sharename\ - person Tim S.; 10.01.2019

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

person user3819536    schedule 16.09.2015

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

Я использую:

  • Win 8 64 бита
  • Питон 2.7

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

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

person Marcelo Assis    schedule 26.08.2015

У меня была такая же проблема с ошибкой загрузки 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
person maxim    schedule 04.02.2016

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

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

  2. Извлечено и скопировано в #your directory#\instantclient_12_1

    Вышеупомянутый каталог содержит dll

  3. Добавьте переменную PATH с #your directory#\instantclient_12_1 и создайте переменную env ORACLE_HOME= #your directory#\instantclient_12_1

  4. Скачайте и установите cx_Oracle-5.2.1-11g.win-amd64-py2.7.exe

  5. Открыть импорт бездействующего типа cx_Oracle

person rupesh patil    schedule 15.03.2016
comment
Кажется, это не отвечает на вопрос и не способствует обсуждению. - person sschale; 15.03.2016
comment
@sshale: Да, это так. Это помогает увидеть правильный порядок и шаги, предпринятые для установки cx_Oracle. - person Chris Nielsen; 01.12.2017

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

conda install cx_oracle

на вашем cmd

-> это

person user6405238    schedule 31.05.2016

Я знаю, что это старый пост, но сегодня у меня была эта проблема, и ни одно из решений не сработало. Я полагаю, что это может работать для других с той же проблемой, что и сейчас.

Версия Python: 2.7.15 (64 бита) Версия cx_Oracle: 6.4.1 Мгновенный клиент Oracle: 18.3

Я продолжал получать следующую ошибку, хотя выполнял все шаги в правильном порядке:

cx_Oracle.DatabaseError: DPI-1047: невозможно загрузить клиентскую библиотеку Oracle

Я решил это, понизив версию Oracle Instant Client до 12.1.

person Dominique Lambert    schedule 10.09.2018
comment
Добавьте дополнительные сведения о среде и/или откройте проблему GitHub, чтобы мы могли понять зачем это было нужно. - person Christopher Jones; 11.09.2018