40

我尝试使用 安装psycopg2在 virtualenv 中pip,编译看起来没问题,它说“成功安装 psycopg2”,但是当我尝试在 python 解释器(在 virtualenv 中)中导入它时,它表明错误:

  File "<stdin>", line 1, in <module>
  File "/Users/me/sites/env/trackmap/lib/python2.7/site-packages/psycopg2/__init__.py", line 67, in <module>
    from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: dlopen(/Users/me/sites/env/trackmap/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: libssl.dylib
  Referenced from: /Users/me/sites/env/trackmap/lib/python2.7/site-packages/psycopg2/_psycopg.so
  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,就像几周前一样,并让它postgresql在我的 mac 上工作。我想知道这是否是编译器的问题?我shortens from 64-bit to 32-bit在安装 psycopg2 期间看到了一些警告。我的编译器是i686-apple-darwin11-llvm-gcc-4.2mac os x lion 上的默认编译器。

我看到了几篇与psycopg2安装相关的帖子,但其中大部分都是通过在虚拟环境中安装来解决的。所以……有人可以给我一个建议吗?谢谢!非常感谢。

ps 如果需要安装psycopg2的编译日志,请告诉我,因为太长,我没有贴在这里。

4

9 回答 9

99

错误是否说libssl.dylib版本太旧?

libssl.dylib在我的 Mac 上,错误是libcrypto.dylibpyscopg 无法使用。mac使用的openssl包是0.98,而pyscopg需要1.0.0或更高版本。

我的解决方案是这样的:

  1. 从 brew 安装 openssl

    $ brew install openssl
    
  2. 复制libssl.1.0.0.dyliblibcrypto.1.0.0.dylib/usr/local/Cellar/openssl/1.0.1c/usr/lib/

    $ cd /usr/local/Cellar/openssl/1.0.1c/lib
    $ sudo cp libssl.1.0.0.dylib libcrypto.1.0.0.dylib /usr/lib/
    
  3. /usr/lib目录中,创建一个软链接libssl.dyliblibcrypto.dylib. 您可能必须删除现有链接。

    $ sudo rm libssl.dylib libcrypto.dylib
    $ sudo ln -s libssl.1.0.0.dylib libssl.dylib
    $ sudo ln -s libcrypto.1.0.0.dylib libcrypto.dylib
    
于 2012-08-11T04:20:29.923 回答
34

我认为在 Mac 中我们需要:

export LDFLAGS="-L/usr/local/opt/openssl/lib"
于 2020-03-06T04:15:25.433 回答
24

在 OSX 10.11+(El Capitan 或更高版本)解决方案上替换符号链接(见上文 - https://stackoverflow.com/a/11911870/565525sudo rm libssl.dylib libcrypto.dylib报告Operation not permitted。对我有用的解决方案是:

brew install openssl

找到 openssl brew 库所在的位置,从 directory 开始搜索/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

重新启动 shell,或者只是source ~/.bash_profile测试它是否有效:

$ python -c"import psycopg2  ;   print('psycopg2 is now ok')"
于 2015-10-09T07:59:16.850 回答
23

我有一个类似的问题。我曾使用 Anaconda 安装 python 和一些软件包,然后使用 pip 安装 psycopg2。我能够通过卸载 psycopg2 并使用 conda 包管理器而不是 pip 重新安装它来修复错误。

pip uninstall psycopg2
conda install psycopg2
于 2015-10-29T00:57:05.363 回答
13

感谢@khrf 的回答。

如果您使用的是 postgres 系统安装程序(而不是 Postgres.app),请使用:

export DYLD_LIBRARY_PATH=/Library/PostgreSQL/9.3/lib

~/.bash_profile如果您想避免每次都键入它,可以将其放在您的中。

于 2014-01-25T23:19:18.407 回答
1

如果您使用的是 PostgresApp,请相应地设置 DYLD_LIBRARY_PATH 环境变量,例如:

DYLD_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib/ ../venv/bin/python manage.py syncdb
于 2014-01-23T13:03:25.840 回答
1

在 ~/.bash_profile 中添加以下行

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/

然后

source ~/.bash_profile
于 2020-07-10T07:53:06.220 回答
0

经过几个小时的故障排除后,添加到我的.zshrc文件中的以下行帮助了我

export DYLD_LIBRARY_PATH=/Library/PostgreSQL/11/lib
于 2019-10-29T06:34:42.183 回答
0

找到您的 libssl 和 libcrypto 文件所在的位置,并在您的 zshrc 文件中设置 LIBRARY_PATH 即可。

参考: 添加库搜索路径到 clang https://mithun.co/hacks/library-not-loaded-libcrypto-1-0-0-dylib-issue-in-mac/

于 2019-11-08T07:58:49.257 回答