python pip安装psycopg2安装错误
我在mac系统上做了一个简单的python pip安装psycopg2安装错误,python,postgresql,pip,Python,Postgresql,Pip,我在mac系统上做了一个简单的pip安装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恰到好处。我已经在几个VirtualNV上安装了psycop
pip安装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
恰到好处。我已经在几个VirtualNV上安装了psycopg2,但这是我第一次看到这样的错误。我尝试卸载和重新安装,结果相同。请帮助我的朋友,只需将libssl.*文件从PostgreSQL lib目录复制到/usr/lib并重新启动您的应用程序,在这种情况下,一切都会很完美^ ^升级到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
编辑:
似乎有些人对我的部分解决方案有问题。也就是说,删除这些重要的库甚至会暂时导致操作系统出现问题
根据,确保在使用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
尝试执行syncdb Postgres 9.1和/psycopg2/_psycopg.so时,添加了另一个错误: 未加载库:@loader\u path/。/lib/libcrypto.dylib 引用自:/usr/lib/libpq.5.dylib 原因:库版本不兼容:libpq.5.dylib需要1.0.0或更高版本,但libcrypto.0.9.8.dylib提供0.9.8版本 通过复制以下六(6)个文件解决: 本地:/Library/PostgreSQL/9.1/lib/ libssl.1.0.0.dylib libssl.a libssl.dylib libcrypto.1.0.0.dylib libcrypto.a libcrypto.dylib 至:本地:/usr/lib 这是在MacOSX10.8.1上,在virtualenv(1.8.2)和pgAdmin(1.14.3)中有一个web。virtualenv内部是: Django==1.4 psycopg2==2.4.5
。。。等现在恢复正常 这里被接受的答案是正确的(除了我认为它一定是ln-fs,事实上我认为如果不是(?)的话,它甚至可能会破坏您的操作系统)。在遇到这个问题并处理它之后,我只想收集这个问题和其他lib问题(libcrypto.1.0.0.dylib)的完整解决方案,您将在Mountain Lion和Snow Leopard以及其他系统上遇到Postgres 9.*的问题。这也阻止了我运行psql,它抱怨同样的两个lib 本质上,
/usr/lib
中需要两个更高版本的lib,libssl和libcrypto。您可以在Postgres lib目录中找到这些lib所需的版本
- 如果您是OSX并且安装了Postgres的企业数据库版本,那么这将在
中/Library/PostgreSQL/9.2/lib
- 对于其他安装类型的Postgres,请在Postgress安装目录中查找lib目录,例如,对于Postgress.app,请在
中查找lib目录/Applications/Postgres.app/Contents/MacOS/lib
- 对于
中的brew/usr/local/ceral
- 在*nix上,无论安装在何处。但是,如果您的发行版仅通过包管理器具有更高版本,请先查看*nix
/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
然后更新(或创建)此libs的/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上乱搞。对于我来说,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
对我来说,在Mavericks上,只需复制两个动态库并重新启动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
手册页下)。在El Capitan的OSX 10.11上,报告了更换符号链接的解决方案不允许操作
。对我有效的解决方案是使用brew并设置DYLD_库路径。因此:
brew install openssl
查找openssl brew LIB的位置(brew——前缀openssl
可以帮助),从目录/usr/local/cillar/openssl
开始搜索。在我的例子中,它位于/usr/local/ceral/openssl/1.0.2d_1/lib
最后设置DYLD_LIBRARY_PATH,即在.bash_配置文件中添加如下行:
# 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\u LIBRARY\u PATH=$DYLD\u LIBRARY\u PATH:$(brew--前缀openssl)/lib
- 出于开发目的,最好使用
来代替-检查DYLD\u FALLBACK\u LIBRARY\u PATH
source~/.bash_profile
,重新安装psycopg2:
pip uninstall psycopg2
pip install psycopg2
并测试其是否有效:
$ python -c"import psycopg2 ; print('psycopg2 is now ok')"
为我工作:
env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib
-L/usr/local/opt/readline/lib' pip install psycopg2
来源:我的Mac OS High Sierra也有类似问题 ImportError:dlopen(/Users/chicha/Projects/CTMR/sample_registration/romans_env/lib/python3.7/site-packages/psycopg2//psycopg.cpython-37m-darwin.so,2):库不是