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


127

我跑

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

谁能帮我吗?


Answers:


285

对于在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在下面指出的,如果这仍然不起作用,则可能需要使用--no-cachepip选项,例如

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

5
实际上,xcode-select --install可能就足够了,这应该使用提供的系统ssl。我将在上面更新我的评论。
2016年

13
xcode-select install对于系统python已经足够了。但是它不适用于虚拟环境。
安德鲁·马丁

3
刚安装了macOS Sierra 10.12,并pip install psycopg2收到了相同的错误消息:“ ld:找不到用于-lssl的库”。xcode-select --install解决了问题。
webtweakers

4
xcode-select --install为我,也为虚拟环境修复了Sierra上的问题
Danra

4
您可能需要使用pip的--no-cache选项。例如env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
machow

58

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

以下为我工作:

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

26

运行时,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"

9

对我有用的是命令中提供的链接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

大多数人可能不使用zsh,但是无论如何,我只是运行echo'export PATH =“ / usr / local / opt / openssl / bin:$ PATH”'>>〜/ .zshrc,这就足以解决问题,而无需更改LDFLAGS和CPPFLAGS环境vars
Mark Aquino

9

在莫哈韦沙漠,我将它们添加到.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和命令行工具后。

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


9

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

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

也曾在莫哈韦沙漠(Mojave)工作。谢谢!
sb9

你节省了我的时间。
sinwoobang

4

这是新的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>

归功于本文:修复macOS Sierra致命错误:找不到“ openssl / opensslv.h”或“ openssl / aes.h”文件


4

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

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

使用brew info openssl之后,可以获取最新信息。


1

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

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


0

而不是同一作者的psycopg2install,install psycopg2-binary

pip install psycopg2-binary

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

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

$ pip install psycopg2-binary

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


0

我在莫哈韦沙漠上遇到这个问题。Mojave不会创建psycopg2需要安装的/ usr / include目录。这并不明显。我在这里找到解决方案: 如何从命令行更新Xcode,该命令行引用:https : //forums.developer.apple.com/thread/104296


进一步说明:我已经安装了Xcode和命令行工具。xcode-select --install命令显示我已经安装了它们,xcode-select -p也已经安装了,并回显了$?返回0,这也表明它们已安装。我正在使用pyenv和pyenv-virtualenv,因此我将psycopg2安装到了虚拟环境中。
ProfX


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

'''


0

我使用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

0

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

为我工作


-4

我设法通过使用以下方法修复了该问题:

brew unlink openssl && brew link openssl --force

我不确定这与之前尝试在OpenSSL上进行的brew卸载/升级有何不同。我的假设是,这些操作留下了一些“错误的”共享库,这些库无法正常工作。请注意,这还解决了安装python加密模块的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.