web-dev-qa-db-fra.com

erreur lors de l'installation de psycopg2, bibliothèque introuvable pour -lssl

Je lance "Sudo pip install psycopg2" et j'obtiens un tas de sortie qui ressemble à

cc -DNDEBUG -g -fwrapv -Os .....
.....
cc -DNDEBUG -g -fwrapv -Os .....
.....

Et à la fin, il dit:

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

Exécuter easy_install ou le faire depuis la source les deux me donnent la même erreur à la fin (la partie sur la bibliothèque est introuvable pour -lssl).


L'exécution de l'installation (ou de la mise à niveau) de brew openssl donne ce qui suit

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

Quelqu'un peut m'aider?

77
tscizzle

Pour tous ceux qui recherchent une solution pour cela sur macOS Sierra 10.12: j'ai résolu ce problème en installant les outils de ligne de commande:

xcode-select --install

Après ça, pip install psycopg2 devrait marcher.

Si ce n'est pas le cas, vous pouvez également essayer de créer un lien contre openssl de brew:

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

avec openssl installé via brew. Notez que le brew link openssl --force ne fonctionne plus:

$ 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

Comme @macho le souligne ci-dessous, si cela ne fonctionne toujours pas, vous devrez peut-être utiliser le --no-cache option de pip, par ex.

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

Lors de l'exécution brew link openssl Je reçois le message suivant:

$ 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

En suivant ces conseils, voici la commande pip que vous devez utiliser:

$ 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"
19
André Borie

J'ai installé OpenSSL à partir de brew (brew install openssl)

Ce qui suit a fonctionné pour moi:

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

Ce qui a fonctionné pour moi, c'est l'indication fournie dans la commande pour lier 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
2
Isaac Philip

Sur mojave, je les ai ajoutés au .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"

a ensuite pu installer psycopg 2.8.3 dans un python 3.7.4 virtualenv.

Ceci après avoir réinstallé xcode et les outils de ligne de commande.

Toutes les réponses ci-dessus ont aidé!

1
pmneve

A récemment eu ce problème dans High Sierra, après avoir installé Python 3.7 dans un virtualenv.

La solution consiste à utiliser une version ultérieure de psycopg2. La version 2.7.7 fonctionnait, contrairement à 2.7.1.

1
dixon1e

J'avais ce problème sur Mojave. Mojave ne crée pas de répertoire/usr/include, que psycopg2 doit installer. Ce n'était pas évident. J'ai trouvé la solution ici: Comment mettre à jour Xcode à partir de la ligne de commande , qui fait référence: https://forums.developer.Apple.com/thread/104296

0
ProfX

En utilisant Fish, les deux commandes suivantes ont résolu ce problème pour moi après l'installation d'OpenSSL à l'aide de Homebrew.

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

Utilisation brew info openssl pour obtenir des informations à jour.

0
Yngve Høiseth

Au lieu d'installer psycopg2 , installez psycopg2-binary , des mêmes auteurs:

pip install psycopg2-binary

Voici ce que dit la documentation sur ce package PyPI:

Vous pouvez obtenir un [...] package autonome, ne nécessitant pas de compilateur ou de bibliothèques externes, en installant le package psycopg2-binary de PyPI:

$ pip install psycopg2-binary

Le package binaire est un choix pratique pour le développement et les tests, mais en production, il est conseillé d'utiliser le package construit à partir de sources.

0
Flimm