[英]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 目錄中找到這些庫的所需版本。
/Library/PostgreSQL/9.2/lib
中。/Applications/Postgres.app/Contents/MacOS/lib
中查找 lib 目錄,/usr/local/Cellar
某處的 brew, 首先將這兩個庫中最新的從 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
升級到 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):
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.