安装psycopg2时出错,找不到-lssl的库

时间:2014-10-09 21:17:32

标签: python postgresql psycopg2

我运行" sudo pip install psycopg2"我得到一堆看起来像

的输出
cc -DNDEBUG -g -fwrapv -Os .....
.....
cc -DNDEBUG -g -fwrapv -Os .....
.....

最后它说:

ld: library not found for -lssl

clang: error: linker command failed with exit code 1 (use -v to see invocation)

error: command 'cc' failed with exit status 1

----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/private/var/folders/bz/pvj1g9xj16d10pjjgbrfl3fw0000gn/T/pip_build_root/psycopg2/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/bz/pvj1g9xj16d10pjjgbrfl3fw0000gn/T/pip-uE3thn-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /private/var/folders/bz/pvj1g9xj16d10pjjgbrfl3fw0000gn/T/pip_build_root/psycopg2
Storing debug log for failure in /Users/Tyler/Library/Logs/pip.log

运行 easy_install 或从源执行两者都在最后给出了同样的错误(关于-lssl找不到库的部分)。


运行brew安装(或升级)openssl会产生以下内容

$ brew upgrade openssl
Error: openssl-1.0.1h already installed

任何人都可以帮助我吗?

23 个答案:

答案 0 :(得分:179)

对于在macOS Sierra 10.12上寻找解决方案的人:我通过安装命令行工具修复了这个问题:

xcode-select --install

之后,pip install psycopg2应该有效。

如果它没有,你也可以尝试链接brew的openssl:

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2

通过brew安装openssl。请注意,brew link openssl --force不再有效:

$ brew link openssl --force                                                                                 17.5s
Warning: Refusing to link: openssl
Linking keg-only openssl means you may end up linking against the insecure,
deprecated system OpenSSL while using the headers from Homebrew's openssl.
Instead, pass the full include/library paths to your compiler e.g.:
  -I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib

如果@macho指出如果这仍然不起作用,你可能需要使用pip的--no-cache选项,例如。

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2

答案 1 :(得分:25)

对于MacOS Catalina 10.15.4,以下是唯一对我有用的命令:

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2

答案 2 :(得分:15)

运行brew link openssl时,我收到以下消息:

$ brew link openssl
Warning: Refusing to link: openssl
Linking keg-only openssl means you may end up linking against the insecure,
deprecated system OpenSSL while using the headers from Homebrew's openssl.
Instead, pass the full include/library paths to your compiler e.g.:
  -I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib

根据此建议,您需要使用pip命令:

$ pip install -r requirements.txt --global-option=build_ext --global-option="-I/usr/local/opt/openssl/include" --global-option="-L/usr/local/opt/openssl/lib"

答案 3 :(得分:7)

在莫哈韦沙漠上,我将它们添加到了.bash_profile

export PATH="/usr/local/opt/openssl/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/curl/lib -L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/curl/include -I/user/local/opt/openssl/include"

然后可以在python 3.7.4 virtualenv中安装psycopg 2.8.3。

在重新安装xcode和命令行工具之后。

以上所有答案都对您有帮助!

答案 4 :(得分:3)

如果export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/命令没有为您做任何更改,那么您可能还需要在此路径中指定openssl版本,例如

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

请注意@1.1之后的openssl

答案 5 :(得分:3)

这是新的macOs版本的问题,其中pip无法安装cryptography。解决我的问题的是将env提供给install命令:

brew install openssl
env LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --prefix openssl)/include" <YOUR COMMAND HERE>

您可以将<YOUR COMMAND HERE>替换为pip install cryptography,例如pip install <SOMETHING THAT REQUIRES cryptography>

本文的信用:Fixing macOS Sierra fatal error: 'openssl/opensslv.h' or 'openssl/aes.h' file not found

答案 6 :(得分:2)

MacOS BigSur 解决方案(2021 年 5 月)

我遇到了类似的问题。 但就在踢我的办公桌之前,我找到了一个解决方案,它在 MacOS BigSur 上对我有用:

我的 OpenSSL 安装已损坏。

brew reinstall openssl

重装完成后会吐出3条你需要执行的命令:

命令如下所示:

不要只是复制

echo 'export PATH="/opt/homebrew/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc

export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"

这对我有用!不能保证这也适用于您。

brew restart 可能不是最好的解决方案,但它有效并提供了必要的命令。

答案 7 :(得分:1)

使用Fish,使用Homebrew安装OpenSSL之后,以下两个命令为我解决了此问题。

set -gx LDFLAGS "-L/usr/local/opt/openssl/lib"
set -gx CPPFLAGS "-I/usr/local/opt/openssl/include"

使用brew info openssl获取最新信息。

答案 8 :(得分:1)

我使用MacPorts安装了OpenSSL,因此目录与Brew的目录不同。

sudo port install openssl

我通过执行以下操作找到了目录:

port contents openssl | grep lib
port contents openssl | grep include

然后我导出变量:

export LDFLAGS="-L/opt/local/lib"
export CPPFLAGS="-I/opt/local/include/openssl"

您可能还必须:

xcode-select --install

答案 9 :(得分:1)

对我有用的是命令中提供的链接openssl的提示,

$ brew link openssl
Warning: Refusing to link macOS-provided software: openssl
If you need to have openssl first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc

For compilers to find openssl you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl/include"

$ export LDFLAGS="-L/usr/local/opt/openssl/lib"
$ export CPPFLAGS="-I/usr/local/opt/openssl/include"

$ pip install psycopg2
Collecting psycopg2
  Using cached https://files.pythonhosted.org/packages/23/7e/93c325482c328619870b6cd09370f6dbe1148283daca65115cd63642e60f/psycopg2-2.8.2.tar.gz
Installing collected packages: psycopg2
  Running setup.py install for psycopg2 ... done
Successfully installed psycopg2-2.8.2

答案 10 :(得分:1)

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

为我工作

答案 11 :(得分:1)

最近在High Sierra中出现了这个问题,刚刚在virtualenv中安装了Python 3.7。

解决方案是使用更高版本的psycopg2。版本2.7.7有效,而版本2.7.1无效。

答案 12 :(得分:1)

如果使用自制软件,强制链接 openssl 可能不是最好的主意。正如上面的一些答案所概述的那样,以下内容在 venv 中对我有用:

export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"
pip install psycopg2

答案 13 :(得分:0)

由同一位作者安装psycopg2,而不是安装psycopg2-binary

pip install psycopg2-binary

这是文档关于此PyPI软件包的说明:

  

您可以通过从PyPI安装psycopg2-binary软件包来获得不需要编译器或外部库的独立软件包:

$ pip install psycopg2-binary
     

二进制包是开发和测试的实际选择,但在生产中,建议使用从源代码构建的包。

答案 14 :(得分:0)

我在莫哈韦沙漠(Mojave)上遇到这个问题。 Mojave不会创建psycopg2需要安装的/ usr / include目录。这并不明显。我在这里找到解决方案: How to update Xcode from command line,其中引用: https://forums.developer.apple.com/thread/104296

答案 15 :(得分:0)

我从brew(brew install openssl)安装了OpenSSL

以下对我有用:

export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
pip install psycopg2

答案 16 :(得分:0)

我也遇到了同样的错误,并在安装了cython后将其解决

答案 17 :(得分:0)

在conda环境中运行PyCharm,使用以下方法解决了我的问题:

--> conda install psycopg2
The following packages will be UPDATED: ...

...
Proceed ([y]/n)? 
--> y
--> pip3 install psycopg2
Installing collected packages: psycopg2
Running setup.py install for psycopg2 ... done
Successfully installed psycopg2-2.8.4

'''


答案 18 :(得分:0)

我知道您要开发环境,但是如果要在服务器上部署,请说Heroku。只需在项目的 requirements.txt 中添加以下行即可。

django-heroku == 0.3.1

因为此软件包本身将在服务器部署上安装所需的软件包,例如 psycopg2 。因此,让heroku服务器处理此问题。

答案 19 :(得分:0)

如果你:

  • 正在尝试在 Python psycopg2 中安装 venv AND
  • 正在尝试在 Apple Silicon(新的 ARM CPU)上安装 psycopg2

然后,正如 Iamashay 在 their answer 中所指示的,我们需要导出一些变量以指向我们的 OpenSSL 安装。

Apple Silicon 上的安装目录显然与 Apple Intel 机器不同。无论如何,要查找系统上安装 OpenSSL 的位置(通过自制软件),您可以运行

brew --prefix openssl

就我而言,我们有 /opt/homebrew/opt/openssl@1.1。所以这意味着我们需要导出的变量是

export LDFLAGS="-L/opt/homebrew/opt/openssl/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl/include"

然后我们就可以运行了

pip install psycopg2

答案 20 :(得分:0)

就我而言,openssl 位于 homebrew 目录内,建议的答案不起作用。

不好:

LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib"

好:

LDFLAGS="-I/opt/homebrew/Cellar/openssl@1.1/1.1.1i/include -L/opt/homebrew/Cellar/openssl@1.1/1.1.1i/lib" pip install psycopg2

提示:

您可以使用 brew --prefix openssl 轻松找到自制软件的 openssl 目录。确保包含版本文件夹(在我的情况下为 1.1.1i)

答案 21 :(得分:-1)

尝试了此处列出的所有内容,然后将shell从zsh切换到bash,然后它起作用了。

答案 22 :(得分:-3)

我已经设法通过使用:

来修复它
brew unlink openssl && brew link openssl --force

我不确定这与我之前尝试过的OpenSSL中的brew卸载/升级有何不同。我的假设是这些操作留下了一些“错误的”共享库,这些库阻止了它的工作。请注意,这也解决了安装python加密模块的问题。