簡體   English   中英

導入 psycopg2 庫未加載:libssl.1.0.0.dylib

[英]Import psycopg2 Library not loaded: libssl.1.0.0.dylib

當我嘗試運行命令時:

import psycopg2

我得到錯誤:

ImportError: dlopen(/Users/gwulfs/anaconda/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: libssl.1.0.0.dylib
  Referenced from: /Users/gwulfs/anaconda/lib/python2.7/site-packages/psycopg2/_psycopg.so
  Reason: image not found

到目前為止,我已經嘗試過brew install openssl並引用了(沒有運氣):

psycopg2 安裝錯誤 - 未加載庫:libssl.dylib

http://joshuakehn.com/2013/10/13/Postgresapp-and-psycopg2-on-OS-X.html

未找到 Psycopg2 圖像

不要在系統庫目錄中使用符號鏈接,而是設置$DYLD_FALLBACK_LIBRARY_PATH以包含 anaconda 庫。 例如:

export DYLD_FALLBACK_LIBRARY_PATH=$HOME/anaconda/lib/:$DYLD_FALLBACK_LIBRARY_PATH

在 Homebrew 不允許我強制鏈接openssl之后,以下工作正常:

pip install --global-option=build_ext \
            --global-option="-I/usr/local/opt/openssl/include" \
            --global-option="-L/usr/local/opt/openssl/lib" psycopg2

(此安裝在 macOS 上的virtualenv中成功)

編輯:潛在危險,請先閱讀評論!

請參閱下面更安全的答案: https ://stackoverflow.com/a/30726895/308315


我在您發布它大約一個小時后遇到了這個確切的問題,然后才弄清楚。 我正在使用 Mac OS X Yosemite、Python 2.7 和 Postgresql 應用程序。

默認情況下似乎設置了一個無效的符號鏈接(或者我在故障排除時引入了它),要修復它首先刪除不正確的鏈接:

$ sudo rm /usr/lib/libssl.1.0.0.dylib
$ sudo rm /usr/lib/libcrypto.1.0.0.dylib

然后重新鏈接它們(將 YOURUSERNAME 替換為您的 Mac 用戶名。我發現使用 tab 完成每個步驟以確認目錄很有幫助):

$ sudo ln -s /Users/YOURUSERNAME/anaconda/lib/libssl.1.0.0.dylib /usr/lib
$ sudo ln -s /Users/YOURUSERNAME/anaconda/lib/libcrypto.1.0.0.dylib /usr/lib

我相信其他解決方案對您不起作用,因為您的版本在 anaconda 中。

在將我的頭撞到牆上幾個小時后,這兩種解決方案保證有效:

選項 1。這解決了我們的問題,而不會弄亂環境變量。 在你的 shell 中運行它:

brew install --upgrade openssl
brew unlink openssl && brew link openssl --force

繁榮! 這會升級/usr/locallibssllibcrypto的符號鏈接。 現在import psycopg2就像一個魅力。

選項 2。如果出於某種原因您想在usr/local中維護當前的符號鏈接,請在您的 shell 中運行此命令:

export DYLD_FALLBACK_LIBRARY_PATH=$HOME/anaconda/lib/:$DYLD_FALLBACK_LIBRARY_PATH

只需確保將上面的$HOME/anaconda/lib替換為實際的 lib 路徑即可。 就我而言,這是$HOME/miniconda2/envs/ali/lib

這僅適用於您當前所在的 shell/bash 會話。要使更改持久化,請將export語句添加到您的~/.bash_profile~/.bashrc文件中。

想法: IMO #1 是處理這個問題的正確方法,但我留下了 #2,以防有些人更喜歡使用環境變量而不是修復符號鏈接(例如,如果他們的軟件依賴於舊的 openssl文件版本)。

conda install psycopg 對我有用。 它更新以下軟件包以下軟件包將被更新:

conda:      3.19.1-py27_0 --> 4.0.5-py27_0
openssl:    1.0.2f-0      --> 1.0.2g-0
pip:        8.0.2-py27_0  --> 8.1.0-py27_0
setuptools: 19.6.2-py27_0 --> 20.2.2-py27_0
wheel:      0.26.0-py27_1 --> 0.29.0-py27_0

我在 Mac 上遇到了這個問題,嘗試 ln -s 給了我 ln: /usr/lib/libssl.1.0.0.dylib: Operation not allowed 我不想弄亂我的系統。 相反,對我有用的是簡單地安裝 psycopg2-binary : pip install psycopg2-binary

這個安裝了psycopg2-binary-2.8.3版本

關於上面 XL 的回答,當我已經在使用 pip 時,我不想使用 Anaconda,所以我只是給它提供了對我有用的 Postgres 庫的路徑(我在 Mac OS 10.10 上使用 PostgreSQL.app )...

export DYLD_FALLBACK_LIBRARY_PATH=/Library/PostgreSQL/9.5/lib:$DYLD_FALLBACK_LIBRARY_PATH

我不得不稍微改變 Scott Brennstuhl 的回答: 1. 刪除損壞的符號鏈接:

$ sudo rm /usr/lib/libssl.1.0.0.dylib
$ sudo rm /usr/lib/libcrypto.1.0.0.dylib
$ sudo rm /usr/lib/libpq.5.dylib
  1. 與 postgres 包含的驅動程序重新鏈接:
$ sudo ln -s   /Applications/Postgres.app/Contents/Versions/9.4/lib/libssl.1.0.0.dylib /usr/lib    
$ sudo ln -s /Applications/Postgres.app/Contents/Versions/9.4/lib/libcrypto.1.0.0.dylib /usr/lib
$ sudo ln -s /Applications/Postgres.app/Contents/Versions/9.4/lib/libpq.5.dylib  /usr/lib

我的設置風格與 OP 有點不同:我在 Mac 上使用Postgres.app並且在virtualenv中; 但症狀相似。

對我來說,這發生在我在本地將我的Postgres.app從 9.3 更新到 9.5 之后,錯誤清楚地顯示了libssl.1.0.0.dylibpsycopg2路徑指向舊的image數據目錄位置(在這個錯誤?)。 在我的ENV中添加奇怪的東西或刪除符號鏈接我不確定這對我的影響絕對不合適。 我通過卸載然后重新安裝psycopg2來解決它,就像它工作時一樣 - 一點都不覺得很危險:

 # In my virtualenv
 pip uninstall psycopg2
 pip install psycopg2

然后我一切都好!

如果 /usr/local/Cellar 目錄中有 openssl,請執行以下操作以解決 Library not loaded:libssl.1.0.0.dylib 錯誤

  1. sudo cp /usr/local/Cellar/openssl/<<版本>>/lib/libssl.1.0.0.dylib /usr/lib

  2. 執行步驟 1 后,如果您仍然收到 Library not loaded:libcrypto.1.0.0.dylib 錯誤。 請執行下列操作
    sudo cp /usr/local/Cellar/openssl/<<版本>>/lib/libcrypto.1.0.0.dylib /usr/lib

brew reinstall openssl postgres對我有用

當我將openssl1.0.0更新到1.1.1d時,我遇到了同樣的問題,這解決了我的問題:

brew upgrade postgresql

所以首先對我來說openssl重新安裝從來沒有奏效。 上面所有的答案對我來說都失敗了,這很煩人。 為確保這是一個 openssl 問題,首先,使用 pip 安裝psycopg2-binary

  pip install psycopg2-binary

安裝psycopg2-binary后,如果您收到類似ld: library not found for -lssl的錯誤,請執行以下操作

  export LDFLAGS="-L/usr/local/opt/openssl/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl/include"

如果這些不起作用,那么您可以嘗試升級psycopg2並重新檢查該問題是否仍然存在。

  pip install psycopg2 --upgrade

如果上述所有方法均無效,則僅嘗試按照上述所有答案中所述重新安裝openssl

我嘗試了 pip install psycopg2 ,它給出了類似的問題。 然后我嘗試了 conda install psycopg2,它奏效了! 還要確保您使用的 pip 屬於 anaconda (which pip)

我正在使用 Mac OS Sierra: 並收到此錯誤:

 Library not loaded: libssl.1.1.dylib

我在

 /Library/PostgreSQL/11/lib

我在互聯網上找到了這個解決方案:

 export DYLD_LIBRARY_PATH=/Library/PostgreSQL/11/lib

但這不是一個永久的解決方案。 因為每當我重新啟動服務器時,我都必須運行上述命令。

添加行:export DYLD_LIBRARY_PATH=/Library/PostgreSQL//lib
到 ~/.bash_profile

對我有用的解決方案( https://stackoverflow.com/a/30726895沒有)是安裝psycopg2-binarypip install psycopg2-binary==2.7.6

這是在 MacOS Mohave 上。

簡單的解決方案:這個 pip 命令將在特定位置安裝一個包:

pip install psycopg2-binary -t PATH

其中 PATH 是您指定的路徑。

要對此進行測試,請將軟件包安裝在桌面上的文件夾中。 然后將 python 腳本放在將導入 psycopg2 的同一文件夾中。 它應該與與 psycopg2 包位於同一位置的腳本一起使用。

注釋:

根據我在網上找到的舊文檔,我們需要 psycopg2-binary 的這個原因:

“二進制包附帶了他們自己版本的幾個 C 庫,其中 libpq 和 libssl ,無論客戶端上可用的其他庫如何,都將使用它們:升級系統庫不會升級 psycopg2 使用的庫。請構建 psycopg2如果您想保持二進制可升級性,請從源代碼中獲取。”

來源: https ://access.crunchydata.com/documentation/psycopg2/2.7.3/install.html#install-from-source

我意識到問題是需要引用 python 的站點包目錄。 這個在我的電腦上的位置是:

/Users/my_name/Library/Python/3.7/lib/python/site-packages

現在,如果你想像我一樣使用 IDLE 或者說 PyCharm,安裝 psycopg2-binary 需要針對這個站點目錄。 此外,您會發現安裝 psycopg2-binary 后出現的兩個文件夾名為:psycopg2、psycopg2_binary-2.8.4.dist-info

我花了很長時間研究這個問題。 其他方法沒有解決上面看到的關於 lib ssl 和找不到原因圖像的問題。

設置:macOS Catalina,Python 3.7,桌面上的 PyCharm/IDLE 項目,openssl@1.1/1.1.1d

經過一天多的嘗試后,我得出了以下解決方案。

  • 沖泡重新安裝openssl@1.0
  • 禁用 csrutil -> 谷歌它如何禁用它,以便我們可以復制一些東西
    到 /usr/lib
  • 將 libssl.1.0.0.dylib 復制到 /usr/lib 我做了- sudo cp /usr/local/Cellar/openssl/1.0.2s/lib/libssl.1.0.0.dylib /usr/lib
  • 將 libcrypto.1.0.0.dylib 復制到 /usr/lib 我做了- sudo cp /usr/local/Cellar/openssl/1.0.2s/lib/libcrypto.1.0.0.dylib /usr/lib

同樣,如果您遇到庫未加載的問題:libssl.1.0.0.dylib只需將 openssl 的版本從 1.0 更改為 1.1 並復制 libssl.1.1 而不是 libssl.1.0 和 libcrypto.1.1 而不是 libcrypto.1.0.0

完成后,您就可以在 mac 中享受 psycopg2 了。

我有python 3.8和postgresql12。我安裝了psycopg2。我可以解析libssl.1.1.dylib。 但libcrypto.1.1.dylib無法通過鏈接(ln -s)進行解析。 因此,試圖將lib文件libcrypto.1.1.dylib復制到usr / lib中,但出現錯誤-否這樣的文件或目錄。 cp:/Library/PostgreSQL/12/usr/lib/libcrypto.1.1.dylib:無此類文件或目錄是否需要安裝更高版本的psycopg。 還有嗎? 謝謝,尼克希爾。

Homebrew 將默認的 openssl 從 v1.0 升級到 v1.1。 如果您嘗試使用@Scott 解決方案升級 openssl:

brew install --upgrade openssl
brew unlink openssl && brew link openssl --force

你可能會遇到 ssh 問題。 您還需要升級 openssh。

brew upgrade openssh

根據這個博客: https ://blog.junjizhi.com/all/2019/12/17/git-fetch-libssl-error.html

我在運行brew upgrade后遇到了這個問題,它將 openssl 從 1.0.0 更新到 1.1.1。 這會導致問題中的錯誤,因為我使用的是 pyscopg 2.7.4,它被固定到openssl@1.0 更新版本的 psycopg (>2.8) 被固定到openssl@1.1

因此,在這種情況下,您的選擇是將您的 psycopg 版本升級到 2.8.1 或更高版本(在您的 Pipfile/Pipfile.lock 等中),或者強制 brew 使用此命令繼續使用 openssl@1.0,取自https:// github.com/Homebrew/homebrew-core/issues/47348#issuecomment-560001981

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/64555220bfbf4a25598523c2e4d3a232560eaad7/Formula/openssl.rb -f

安裝 pip install -i https://test.pypi.org/simple/ psycopg2==2.7.6.1.dev1 為我工作

我遇到了最初發布在此線程中的問題。 我將其追溯到libpq的問題。 對我來說,解決方案是運行

brew install postgresql

之后psycopg2就像輕而易舉地工作。

暫無
暫無

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

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