2013-05-06 90 views
52

試圖與Postgres的Mac應用程序安裝的Postgres,打這個錯誤,我一直沒能解決。有什麼想法嗎?Psycopg2沒有找到圖片

ImportError: dlopen(/Users/Craig/pyenv/mysite/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: @executable_path/../lib/libssl.1.0.0.dylib 
    Referenced from: /Applications/Postgres.app/Contents/MacOS/lib/libpq.dylib 
    Reason: image not found 

回答

0

您是否安裝了psycopg2?你需要它,以便將python與postgresql集成。

+0

是的,它的安裝。我正在運行pyenv,可能會影響事情嗎? – 2013-05-06 22:05:57

+0

我不知道,我從來沒有嘗試過pyenv – Ari 2013-05-06 22:10:52

9

在加載之前,你的bash環境,試試這個:

export DYLD_LIBRARY_PATH=/Library/PostgreSQL/x.y/lib 

..replacing的「xy格式」與您的系統上的版本。

..be知道,在您的bash配置文件中設置此可以與其他程序發生衝突,因爲KindOfGuy指出。

..of當然,如果你不從bash提示符運行它,你必須設置你的任何方式pyenv讓你的環境。你甚至可以編輯pyenv本身並將其放置在頂部。

另一種方法是把這個你嘗試導入psycopg2之前運行在python腳本:

import os 
os.environ['DYLD_LIBRARY_PATH'] = '/Library/PostgreSQL/x.y/lib' 

..again,與您的系統在/ Library/PostgreSQL的的版本替換「xy格式」。

+0

什麼都沒有...雖然我檢出了文件夾'/ Library/PostgreSQL/9.2 /',裏面的唯一項目是一個名爲'data'的鎖定文件夾。我想應該有其他物品,對吧? – 2013-05-06 23:36:55

+2

從bash配置文件運行導出導致其他地方的麻煩,但我堅持'os.environ ['DYLD_LIBRARY_PATH'] ='/圖書館/ PostgreSQL/x.y/lib''進入manage.py這是一種魅力。在所有項目中仍然需要這樣做,但這會幫助我,直到問題得到其他方面的排序。 – KindOfGuy 2013-05-28 13:18:56

+0

@KindOfGuy,爲我工作。謝謝。最後讓'postgresql'在Django中重新聯機。 – 2014-03-17 04:12:29

81
$ sudo ln -s /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/lib 
$ sudo ln -s /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/lib 

我在使用Django時遇到了此錯誤。 我使用Django == 1.3在virtualenv上工作,但不是在Django == 1.5上,我必須發出上述命令。

在OS X埃爾卡皮坦你不能做這些鏈接,而無需禁用系統的保護,但它工作得很好,如果你鏈接到/ usr/local/lib目錄

+2

這個答案是唯一一個爲我工作的,並沒有像Mercurial等其他系統搞砸了。看起來這是一個已知的問題:https://github.com/PostgresApp/PostgresApp/issues/109#issuecomment-18387546 – 2013-05-31 18:50:43

+12

對於那些使用Heroku的Postgres.app - 'sudo ln -s /Applications/Postgres.app/Contents/MacOS/lib/libssl.1.0.0.dylib/usr/lib' 'sudo ln -s /Applications/Postgres.app/Contents/MacOS/lib/libcrypto.1.0.0.dylib/usr/lib' – s29 2013-08-26 00:44:28

+0

如果您已經創建了以前版本的符號鏈接,請務必在創建之前將其刪除新的一個。 'sudo rm/usr/lib/libssl.X.X.X.dylib' 'sudo rm/usr/lib/libcrypto.X.X.X.dylib' 然後在philippinedev答案後添加新鏈接。 (確保在你的路徑中有正確的文件版本) – Kamagatos 2013-12-02 02:46:33

17

我發現有交易時爲我工作的解決方案類似的問題在rails上。下面添加到你的.bash_profile,.bash_rc,或等效:

export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib:$DYLD_LIBRARY_PATH 

(假設您在默認位置安裝Postgres.app)。然後重新啓動終端會話並重試。

導出到DYLD_LIBRARY_PATH直接會導致嚴重的問題,依賴於它的其他應用程序,但使用備用路徑避免了這些問題。

參見:https://github.com/PostgresApp/PostgresApp/issues/109#issuecomment-18387546

編輯:看來,設置DYLD_FALLBACK_LIBRARY_PATH當您嘗試運行PSQL導致錯誤。爲了解決這個問題,你可以將以下兩行添加到你的.bash_profile:

alias psql="(. ~/.bash_profile; unset DYLD_FALLBACK_LIBRARY_PATH; psql)"; 

這是假設你正在使用bash和你的.bash_profile位於你的主目錄。如果不是這種情況(或者,如果您使用的是.bashrc或者其他環境設置,而不是.bash_profile中)命令的~/.bash_profile部分更改爲路徑,以您的環境設置腳本。

別名命令開始基本上不影響您的當前的bash環境中的子shell。所以當它解除DYLD_FALLBACK_LIBRARY_PATH變量時,它只是暫時的。在你退出psql之後,環境變量將被重新設置。

+0

這對我來說適用於Postgres.app的v9.2.4 – keno 2013-06-08 23:54:16

+0

謝謝,在Mac OS 10.9.1和Postgres 9.2中,此工作對我來說也很順利和完美。 – Sam 2013-12-21 17:11:25

+0

對virtualenv進行了小的調整;我將這一行添加到我的'postactivate':'export「DYLD_FALLBACK_LIBRARY_PATH =/Library/PostgreSQL/9.4/lib:$ DYLD_LIBRARY_PATH」',並且在安裝時使用這個命令:'DYLD_LIBRARY_PATH =/Library/PostgreSQL/9.4/lib pip install psycopg2 ' – shapiromatron 2015-11-18 17:08:21

10

這個問題花了我整個上午去解決。我發現關於http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/的討論確實很有幫助。由於Jurie的答案,解決我的問題(在Mac)是如下:

brew install openssl 
  • 使用以下命令:

    export DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/**1.0.1x**/lib 
    

    1. 使用BREW將OpenSSL安裝1.0.0

      更換1.0.1x部分與您的當前版本。對我來說這是1.0.1h。

    希望這有助於!

    編輯:一天後,我發現了第二個命令有需要的時候連接到數據庫,所以不是一個永久性的解決這個問題,必須輸入每次。

  • +0

    執行該命令時設置DYLD_LIBRARY_PATH環境變量也適用:DYLD_LIBRARY_PATH =/usr/local/Cellar/openssl/1.0.2d_1/lib/python manage.py migrate – markonovak 2015-10-09 12:59:02

    +0

    add'export DYLD_LIBRARY_PATH =/usr/local/Cellar/openssl/** 1.0.1x **/lib'激活腳本(例如〜/ anaconda3/envs/myenv/bin/activate) – maxbellec 2016-05-30 14:29:43

    +1

    您還可以在'〜/ .bash_profile'中添加命令,並且每次都會工作必須一次又一次地輸入 – 2016-10-17 08:11:06

    2

    我取決於其中PSQL安裝在您的計算機上的位置發現了這個解決方案,爲我工作

    sudo cp /Applications/Postgres.app/Contents/Versions/9.3/lib/libssl.1.0.0.dylib /usr/lib 
    sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib 
    
    sudo cp /Applications/Postgres.app/Contents/Versions/9.3/lib/libcrypto.1.0.0.dylib /usr/lib 
    sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib 
    

    更換這部分「/Applications/Postgres.app/Contents/Versions/9.3/」。命令查找psql的安裝位置:which psql

    從評論更新: 在OSX 10.11(El Capitan)上,您不能再將文件複製到/ usr/lib。使用/ usr/local/lib目錄

    +0

    我很驚訝沒有人提高了這一點 - 爲我做了訣竅。謝謝@ mit-mehta – 2015-04-03 15:45:04

    +0

    回覆:@ MitMehta的解決方案:在OSX 10.11(El Capitan)上,您不能再將文件複製到/ usr/lib。使用/ usr/local/lib。 – prefectionist 2015-12-17 20:09:02

    +0

    爲什麼不使用Postgres.app中可用的'latest'符號鏈接,並複製到/ usr/lib和/ usr/local/lib中,如下所示:sudo ln -sf /Applications/Postgres.app/Contents/Versions/latest/lib/ libssl.dylib {/ usr/lib,/ usr/local/lib}; sudo ln -sf /Applications/Postgres.app/Contents/Versions/latest/lib/libcrypto.dylib {/ usr/lib,/ usr/local/lib} – 2016-04-22 02:42:12

    2

    我錯過了PostgreSQL客戶端軟件包,所以我安裝他們釀造,並且修復了這個問題對我來說。

    brew update 
    brew doctor 
    brew install postgresql 
    
    3

    大圖,問題是無法找到所需的庫。您可以使用Apple的open source compiler toolsotoolinstall_name_tool更改psycopg2尋找libssl的位置。這些附帶OS X,手冊頁可用於man <command>

    變化到在錯誤消息中提到的psycopg2模塊的目錄。一旦有:

    $ otool -L _psycopg.so 
        ... 
        @executable_path/../lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0) 
        ... 
    

    此列出了圖書館_psycopg2.so將尋找。您可以更改它會看起來與install_name_tool

    $ install_name_tool -change @executable_path/../lib/libssl.1.0.0.dylib /usr/local/opt/openssl/lib/libssl.1.0.0.dylib _psycopg.so 
    

    你需要調整,你有libssl.1.0.0.dylib,當然。我給出的例子是默認的自制程序路徑,但是您可以從Anaconda和/或PostgreSQL應用程序包獲得它。 (brew install openssl,如果你還沒有的話)。你也可能需要重複libcrypto。

    執行這一變化可能取決於_psycopg2.so是如何構建的失敗。如果發生這種情況,您可以使用自定義庫路徑自己構建模塊,但是我不會介入。

    這種方法具有可更窄,並因此較不危險,比方法的優點既可以通過ln -s聯的libssl 1.0.0成dyld的搜索路徑(或設置DYLD_*環境變量(在其他的答案給出這裏) )。 (請參閱pairdiscussionssome code以瞭解有關dyldman dyld的更多信息。)它的缺點是需要對psycopg2的每個副本重複。選擇你自己的冒險。

    免責聲明:本答案的大部分內容來自於我在一天之內拼湊出的知識。我不是專家。

    +0

    非常棒!就是這樣! – 2016-07-13 14:06:57

    2

    因爲升級Postgres.app(從9.3到9.4),我有相同的錯誤。

    解決的辦法是刪除PIP緩存輪子,因爲他們指着Postgres.app版本9.3。

    我已經找到了根據psycopg輪緩存文件這樣

    grep -r psycopg ~/.pip/cache 
    

    和刪除我用最後的命令所在的目錄。

    +1

    謝謝。刪除緩存,沒有別的,django執行沒有問題。 – 2015-09-30 23:22:18

    7

    這發生在我升級後PostgreSQL的,在我的virtualenv安裝psycopg2後。重新安裝(重新構建)爲我工作。

    pip uninstall psycopg2 
    pip install psycopg2 
    
    +0

    在OS X El Capitan 10.11.3上將postgresql.app版本9.3升級到9.5後,此工作適用於我。 – bmjjr 2016-09-09 16:10:48

    +0

    這是爲我工作的唯一解決方案!謝謝! – YAL 2016-11-30 18:35:29

    6

    我在el capitan上從postgres.app 9.4升級到9.5時遇到了這個問題。

    其他的解決方案不會在埃爾卡皮坦(容易)工作,因爲在某些目錄系統鎖定,這意味着符號鏈接的解決方案將是不太容易接近/適合大多數。

    這留下了回退變量。目前的答案指向錯誤的目錄。我猜dylibs目錄已經改變,因爲2013年

    所以,這裏是最新的後備目錄爲我的作品:

    export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/Versions/latest/lib:$DYLD_LIBRARY_PATH 
    
    +0

    謝謝!在問題中類似的問題是讓我絕對是笨拙的,但是把Postgres的''lib'預先放在'DYLD_FALLBACK_LIBRARY_PATH'上就行了。 – 2016-03-29 16:02:32

    2

    在Mac OS X 10.11(酋長),/usr/lib是隻讀的根用戶。 你會得到一個ln: /usr/lib/libssl.1.0.0.dylib: Operation not permitted error 您需要使用/usr/local/lib,而不是/usr

    $ sudo ln -s /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/local/lib 
    $ sudo ln -s /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/local/lib 
    
    0

    我遇到了與mysql類似的問題。要求該庫被加載失敗/usr/local/mysql/lib/libmysqlclient_r.16.dylib

    然而,在這個目錄中,有庫的更新版本: /usr/local/mysql/lib/libmysqlclient.20.dylib

    我在virtualenvwrapper工作,並試圖重新安裝所有先前安裝依賴關係無濟於事。任何援助將不勝感激。

    0

    只是想分享什麼爲我工作。我和jupyter一起使用了Anaconda。下面的工作:

    DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/1.0.2k/lib jupyter notebook 
    

    但後來導致後面的問題導入另一個庫(情節)。玩過pip之後,我意識到我應該使用conda來代替,下面的內容似乎解決了所有問題。

    conda install psycopg2 
    
    0

    爲我工作的解決方案是與「無二進制」選項進行設置,它告訴psycopg2使用該系統的libssl安裝psycopg2。

    默認情況下,psycopg2使用它自己的libssl版本,它似乎保留了我的升級後不再存在的舊版本庫的依賴關係。

    有關無二元選項的更多詳細信息,請參閱psycopg2 install docs

    pip uninstall psycopg2 
    pip install --no-binary :all: psycopg2 
    
    0

    嘗試使用pip install psycopg2 --upgrade到最新版本更新psycopg2,然後再試一次。