Psycopg2 image not found
尝试使用postgres mac应用设置postgres并遇到此错误,但我无法解决。 有什么想法吗?
1 2 3 | 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 |
1 2 | $ 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 El Capitan中,您必须在不禁用系统保护的情况下进行这些链接,但是如果您链接到/ usr / local / lib,它会很好地工作
我找到了一个解决类似铁路问题的解决方案。将以下内容添加到您的.bash_profile,.bash_rc或同等版本中:
1 | 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
编辑:似乎在尝试运行psql时,设置DYLD_FALLBACK_LIBRARY_PATH会导致错误。要解决此问题,您可以在.bash_profile中添加以下两行:
1 | alias psql="(. ~/.bash_profile; unset DYLD_FALLBACK_LIBRARY_PATH; psql)"; |
假设您正在使用bash,并且.bash_profile位于主目录中。如果不是这种情况(或者您使用的是.bashrc或其他环境设置而不是.bash_profile),请将命令的
别名命令基本上会启动一个不影响当前bash环境的子shell。因此,当它取消设置DYLD_FALLBACK_LIBRARY_PATH变量时,它只是临时的。退出psql后,将再次设置环境变量。
在升级Postgresql之后,并在我的virtualenv中安装了psycopg2之后,这发生在我身上。重新安装(重建)对我有用。
1 2 | pip uninstall psycopg2 pip install psycopg2 |
这个问题使我整个上午都无法解决。我发现http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/上的讨论非常有帮助。感谢Jurie的回答,针对我的问题(在Mac中)的解决方案如下:
使用brew安装openssl 1.0.0:
1 | brew install openssl |
使用以下命令:
1 | export DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/**1.0.1x**/lib |
将1.0.1x零件替换为当前版本。对我来说是1.0.1h。
希望这可以帮助!
编辑:一天后,我发现每次需要连接到数据库时都必须输入第二个命令,因此不是永久解决此问题的方法。
在您的bash环境中,在加载之前,请尝试以下操作:
1 | export DYLD_LIBRARY_PATH=/Library/PostgreSQL/x.y/lib |
..用系统上的版本替换" x.y"。
..请注意,如KindOfGuy所述,在bash个人资料中设置此设置可能会干扰其他程序。
..当然,如果您不是从bash提示符下运行它,则必须以pyenv允许的任何方式设置环境。 ..您甚至可以编辑pyenv本身并将其放在顶部。
另一个替代方法是将其放入在尝试导入psycopg2之前运行的python脚本:
1 2 | import os os.environ['DYLD_LIBRARY_PATH'] = '/Library/PostgreSQL/x.y/lib' |
再次..,用/ Library / PostgreSQL中系统上的版本替换'x.y'。
当我在capitan上从postgres.app 9.4升级到9.5时遇到了这个问题。
由于某些目录上的系统锁定,其他解决方案无法(轻松)在cap capan中工作,这意味着符号链接解决方案在大多数情况下将较不易用/理想。
留下后备变量。当前答案指向错误的目录。我猜想dylibs目录自2013年以来已更改。
因此,这是适用于我的最新后备目录:
1 | export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/Versions/latest/lib:$DYLD_LIBRARY_PATH |
在Mac OS X 10.11(El Capitan)下,
您会得到一个
您需要使用
1 2 | $ 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 |
大图,问题在于找不到所需的库。您可以使用Apple的开源编译器工具
转到错误消息中提到的
1 2 3 4 | $ otool -L _psycopg.so ... @executable_path/../lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0) ... |
这列出了
1 | $ 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链接到
免责声明:此答案中的大部分内容来自于我在一天内拼凑而成的知识。我不是专家。
1 | pip install psycopg2-binary |
奇迹般有效!
我缺少了postgresql客户端软件包,所以我用brew安装了它们,从而为我解决了这个问题。
1 2 3 | brew update brew doctor brew install postgresql |
我找到了适合我的解决方案
1 2 3 4 5 | 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 |
根据在计算机上安装psql的位置,替换此部分'/Applications/Postgres.app/Contents/Versions/9.3/'。查找安装psql的命令:
来自评论的更新:
在OSX 10.11(El Capitan)上,您不能再将文件复制到/ usr / lib。使用/ usr / local / lib
由于将Postgres.app(从9.3升级到9.4),我遇到了相同的错误。
解决方案是删除pip缓存轮,因为它们指向的是Postgres.app版本9.3。
我已经找到了相应的psycopg轮缓存文件
1 | grep -r psycopg ~/.pip/cache |
并删除上一条命令找到的目录。
使用
1 | pip install psycopg2-binary |
我在mysql中遇到类似的问题。请求的库无法加载
但是,在此目录中,有一个更高版本的库:
我正在virtualenvwrapper中工作,并尝试重新安装所有以前安装的依赖项,但无济于事。任何帮助将不胜感激。
只是想分享对我有用的东西。我在用Jupyter使用Anaconda。以下工作:
1 | DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/1.0.2k/lib jupyter notebook |
但是后来导致了导入另一个库的问题(密谋)。在玩完pip之后,我意识到我可能应该改用conda,以下内容似乎可以解决所有问题。
1 | conda install psycopg2 |
您安装了psycopg2吗?您需要它以便将python与postgresql集成。
对我有用的解决方案是使用" no-binary"选项集安装psycopg2,该命令告诉psycopg2使用系统libssl。
默认情况下,psycopg2使用自己的libssl版本,并且似乎依赖于该库的旧版本,该旧版本在升级后不再存在。
有关no-binary选项的更多详细信息,请参见psycopg2安装文档。
1 2 | pip uninstall psycopg2 pip install --no-binary :all: psycopg2 |
尝试使用
尝试找到一个或多个libssl.1.0.0.dylib文件并将其复制到您的'/ usr / local / lib /'
对我来说,来源是'/ Library / PostgreSQL / 11 / lib /'(将版本更改为您的)
或者,您可以将所有内容复制到" / usr / local / lib /"
转到原点并键入:
sudo cp * / usr / local / lib /复制所有文件。
我找到了解决方案并将其更改为解决我的问题https://oscarvalles.wordpress.com/2017/03/24/dlopenlibrary-not-loaded-libssl-dylib-fail-to-import-psycopg2-in-virtualenv/