簡體   English   中英

cx_Oracle:ImportError:DLL 加載失敗:此應用程序失敗

[英]cx_Oracle: ImportError: DLL load failed: This application has failed

這是我所做的:

  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

在此處輸入圖片說明

好的,最終解決了問題的是什么(不確定是否所有步驟都是必要的,也不知道為什么會這樣,到目前為止只有這樣有效):

  • 這里下載並解壓縮版本 12
  • 添加“ ORACLE_HOME ”作為 Windows 環境變量並將其值設置為...\\instantclient_12_1 ,(不是它的包含文件夾!)。
  • 將此相同的路徑添加到“ Path ”環境變量中。
  • 現在才安裝cx_Oracle

幫助其他有同樣問題的人:

此錯誤說明導入模塊時某些 DLL 之間存在 32-64 位不匹配。 可能性是:

  1. Python 和 cx_Oracle 的不同架構(不太可能,因為 Windows 上的 cx_Oracle 安裝程序會在未找到合適的 Python 時警告您)。
  2. cx_Oracle 庫和 oci.dll 的不同架構(更有可能)。

請記住,cx_Oracle 使用標准 Oracle 客戶端(在 OCI 級別),它必須安裝在您的機器上。 它在多個位置搜索 oci.dll,包括PATH 如果發現客戶端版本錯誤的oci.dll,就會出現錯誤。

如果出現此錯誤,請檢查PATH環境變量中的路徑列表。 它可能包含錯誤版本的 Oracle 客戶端的 BIN 文件夾的路徑。 如果您有多個客戶端,請在PATH 中指定合適的客戶端,或安裝合適的客戶端。

注意: ORACLE_HOME 對 cx_Oracle 沒有影響。 在我的情況下,只有改變 PATH 有幫助。 我認為 Ruben 的解決方案之所以有效,是因為第 3 項(“將相同的路徑添加到“路徑”環境變量中)。

我在win 7(64位)上使用python35 64位和oracle express。 我使用 pip3 ( pip3 install cx_Oracle ) pip3 install cx_Oracle而不是從 pypi 下載安裝程序。

我遇到了同樣的問題。

我按照上述指南解決了這個問題,但我沒有下載 32 位客戶端,而是從http://www.oracle下載了 64 位版本的即時客戶端 (instantclient-basic-windows.x64-11.2.0.4.0.zip).com/technetwork/topics/winx64soft-089540.html

然后我將其解壓縮到 c:\\oraclex。 並添加了這些環境變量

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 migrate 命令:
python manage.py 遷移

它工作得很好

簡單的方法:

  • 確保你已經安裝了 cx-Oracle,我有cx_Oracle-5.1.3-11g.win32-py2.7.exe
  • 下載、解壓instantclient_12_1並將其移動到C:\\Python27
  • 添加環境變量C:\\Python27\\instantclient_12_1
  • 重新啟動計算機

設置發生了相同的ImportError

  • 視窗 10 x64
  • Oracle 即時客戶端 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>

也有這個問題,如果在 PATH 環境變量中的 Oracle 前面有任何無效/無法訪問的 UNC 路徑,似乎導入 cx_Oracle(至少從 5.1.2 開始)將失敗(出現相同的錯誤)。

修復 UNC 路徑(與 Oracle 無關)解決了該問題。

如果您使用 conda 作為包管理器,克服 DLL 問題的一種方法是通過執行conda install oracle-instantclient 這修復了我無法通過手動安裝 Oracle 的即時客戶端來修復的依賴項。

就像我第二次遇到這個問題一樣,我覺得有必要發布我所做的:

我正在使用:

  • 贏8 64位
  • 蟒蛇 2.7

我沒有成功安裝 Python 和 cx_Oracle 64 bits

它僅在我嘗試 32 位版本並遵循 @rob 回答說明時才有效

我在 Windows 機器上遇到了同樣的 DLL 加載失敗問題。 安裝 oracle 客戶端,設置變量,運行 cx_Oracle-5.1.3-11g.win32-py2.7.exe 文件。

但是,當我使用 easy_setup 安裝 cx_Oracle 時,它​​解決了這個問題。

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

我遵循的步驟:

  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 並創建環境變量 ORACLE_HOME= #your directory#\\instantclient_12_1

  4. 下載並安裝 cx_Oracle-5.2.1-11g.win-amd64-py2.7.exe

  5. 打開空閑類型導入cx_Oracle

如果您在 Windows 上使用 Anaconda,請嘗試:

conda install cx_oracle

在你的 cmd 上

-> 這個

我知道這是一篇舊帖子,但我今天遇到了這個問題,但沒有一個解決方案有效。 我認為這可能適用於目前遇到相同問題的其他人。

Python 版本:2.7.15(64 位)cx_Oracle 版本:6.4.1 Oracle Instant Client:18.3

即使我按照正確的順序執行了每個步驟,我仍然收到以下錯誤:

cx_Oracle.DatabaseError:DPI-1047:無法加載 Oracle 客戶端庫

我通過將我的 Oracle Instant Client 版本降級到 12.1 解決了這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM