簡體   English   中英

python pip install psycopg2安裝報錯

[英]python pip install psycopg2 install error

我在 mac 系統上做了一個簡單的pip install psycopg2 它安裝正常,但是當我嘗試使用 psycopg2 時出現錯誤:

Reason: Incompatible library version: _psycopg.so requires version 1.0.0 or later, but libssl.0.9.8.dylib provides version 0.9.8

pip freeze顯示psycopg2==2.4.5恰到好處。 我已經在幾個 virtualenvs 上安裝了 psycopg2,但這是我第一次看到這樣的錯誤。 我嘗試卸載並重新安裝,結果相同。 請幫忙

這里接受的答案是正確的(除了我認為它必須是 ln -fs,事實上我認為如果不是(?),它甚至可能會破壞你的操作系統)。 在遇到這個問題並處理它之后,我只想收集這個問題的完整解決方案和其他 lib 問題(libcrypto.1.0.0.dylib),您將在 Mountain Lion 和 Snow Leopard 上遇到 Postgres 9.*,並且也許其他系統。 這也阻止了我運行 psql,它抱怨相同的兩個庫。

基本上/usr/lib中需要兩個更高版本的庫,即 libssl 和 libcrypto。 您可以在 Postgres lib 目錄中找到這些庫的所需版本。

  • 如果你是 OSX 並且安裝了 Postgres 的企業數據庫版本,這將在/Library/PostgreSQL/9.2/lib中。
  • 對於其他安裝類型的 Postgres,在 Postgress 安裝目錄中查找 lib 目錄,例如,對於 Postgress.app,在/Applications/Postgres.app/Contents/MacOS/lib中查找 lib 目錄,
  • 對於/usr/local/Cellar某處的 brew,
  • 在 *nix 上,無論你安裝在哪里。 但是,如果您的發行版僅通過包管理器具有更高版本,請先在 *nix 上查看。

首先將這兩個庫中最新的從 Postgres lib 目錄復制到/usr/lib

sudo cp /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/lib
sudo cp /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/lib

然后更新(或創建)這個庫的 /usr/lib 符號鏈接。 無論哪種方式,命令都是ln -fs

sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib

應該是固定的。 很確定 ln -fs 比刪除符號鏈接並重新制作它更好,因此 libssl 在它不存在時被需要它的東西找不到的可能性較小(它做同樣的事情;它首先刪除符號鏈接,如果它是已經在那里,只是比你輸入它的速度快)。 始終警惕在 /usr/lib 上亂搞。

為我工作:

env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib
-L/usr/local/opt/readline/lib' pip install psycopg2

資料來源: 無法在 Mac OS X 10.7 上的 virtualenv 中使用 pip 安裝 psycopg2

升級到 Mountain Lion 后,我遇到了類似的問題。

不要按照 Slack 的建議復制 libssl.* 文件,而是確保/usr/lib/libssl.dylib實際上是指向最新版本庫的軟鏈接。

例如,在我的機器上, ls -l /usr/lib/libssl*給出:

lrwxr-xr-x  1 root  wheel    46B Jun 27 15:24 /usr/lib/libssl.1.0.0.dylib -> /Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib
lrwxr-xr-x  1 root  wheel    27B Jul 30 10:31 /usr/lib/libssl.dylib -> /usr/lib/libssl.1.0.0.dylib

如果libssl.dylib沒有鏈接到錯誤版本提到的版本,請確保您擁有該版本的庫,然后確保/usr/lib/libssl.dylib指向它,而不是舊版本。

如果鏈接不存在,請像這樣創建它

sudo ln -s library_to_link_to link_to_create

當然,使用適合您機器的正確位置。 對我來說,結果是:

sudo ln -s /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib

編輯

似乎有些人在使用我的部分解決方案時遇到了麻煩。 也就是說,即使是暫時刪除這些重要的庫也會導致操作系統出現問題。

根據Purrell 的回答,確保在使用ln命令時包含-fs標志,這有助於確保庫不會在短時間內丟失。 例如,

sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib

在 OSX 10.11 上,El Capitan,替換符號鏈接的解決方案報告Operation not permitted 對我有用的解決方案是使用 brew 並設置 DYLD_LIBRARY_PATH。 所以:

brew install openssl

找到 openssl brew 庫所在的位置( brew --prefix openssl可以提供幫助),從目錄/usr/local/Cellar/openssl開始搜索。 在我的例子中,它在/usr/local/Cellar/openssl/1.0.2d_1/lib

最后設置DYLD_LIBRARY_PATH,即在.bash_profile中加入這樣一行:

# replace location of lib files with folder name you found in previous step
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/Cellar/openssl/1.0.2d_1/lib

更新:更通用/更好的選擇是(感謝@dfrankow):

  • 使用 brew 查找 openssl 位置(注意,brew 可能很慢): DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$(brew --prefix openssl)/lib
  • 出於開發目的,也許最好改用DYLD_FALLBACK_LIBRARY_PATH - 檢查這個

重新啟動 shell,或者只是source ~/.bash_profile ,重新安裝 psycopg2:

pip uninstall psycopg2
pip install psycopg2

並測試它是否有效:

$ python -c"import psycopg2  ;   print('psycopg2 is now ok')"

當嘗試執行 syncdb Postgres 9.1 和 /psycopg2/_psycopg.so 添加了一個進一步的錯誤:

庫未加載:@loader_path/../lib/libcrypto.dylib 引用自:/usr/lib/libpq.5.dylib 原因:庫版本不兼容:libpq.5.dylib 需要 1.0.0 或更高版本,但 libcrypto. 0.9.8.dylib 提供0.9.8版本

通過從以下位置復制這六 (6) 個文件來解決:

本地:/圖書館/PostgreSQL/9.1/lib/

libssl.1.0.0.dylib

libssl.a

libssl.dylib

libcrypto.1.0.0.dylib

libcrypto.a

libcrypto.dylib

到:本地:/usr/lib

這是在 Mac OSx 10.8.1 上,在 virtualenv (1.8.2) 和 pgAdmin (1.14.3) 中有一個 web。 virtualenv 內部是:

Django==1.4

psycopg2==2.4.5

...等...現在恢復正常。

對我來說,libcryto 和 libss 版本 1.0.0 位於以下位置:

/Library/PostgreSQL/9.1/lib/libcrypto.1.0.0.dylib
/Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib

所以解決我的問題的命令是:

sudo ln -fs /Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
sudo ln -fs /Library/PostgreSQL/9.1/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib

我的朋友,只需將 libssl.* 文件從 PostgreSQL lib 目錄復制到 /usr/lib 並重新啟動您的應用程序,在這種情況下一切都會完美 ^_^

對於我在 Mavericks 上,只需復制兩個 dylib 並重新啟動 Python 就可以了:

cp /Library/PostgreSQL/9.3/lib/libssl.1.0.0.dylib /usr/lib/
cp /Library/PostgreSQL/9.3/lib/libcrypto.1.0.0.dylib /usr/lib/

如果您不願意將庫復制到系統目錄中,可以使用 DYLD_LIBRARY_PATH 環境變量強制操作系統在 Postgres 的庫目錄中搜索 libssl。 例如:

$ DYLD_LIBRARY_PATH=/Library/PostgreSQL/9.4/lib pip install psycopg2

(記錄在dyld手冊頁下)。

我在我的 Mac OS High Sierra 上遇到了類似的問題。

導入錯誤:dlopen(/Users/chicha/Projects/CTMR/sample_registration/romans_env/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so,2):未加載庫:/opt/local /lib/libssl.1.0.0.dylib

但是在“pip install postgres”之后它工作正常。 根據 pip show - “postgres 是對 psycopg2 的高價值抽象”。 安裝時還安裝了 psycopg2-binary 和 psycopg2-pool。 所以,他們一起以某種方式修復了這種情況。

暫無
暫無

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

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