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

128

je cours

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

Courir easy_install ou faire de la source à la fois me donner la même erreur à la fin (la partie sur la bibliothèque n'a été trouvée pour -lssl).


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

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

Quelqu'un peut m'aider?

tscizzle
la source
Copie
IamAshay

Réponses:

286

Pour tous ceux qui recherchent une solution pour cela sur macOS Sierra 10.12 (ou version ultérieure, très probablement): j'ai résolu ce problème en installant les outils de ligne de commande:

xcode-select --install

Après cela, pip install psycopg2devrait fonctionner.

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

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

avec openssl installé via infusion. Notez que le brew link openssl --forcene 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 l' --no-cacheoption de pip, par exemple

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
sas
la source
5
En fait, cela xcode-select --installpeut suffire, cela devrait utiliser le système fourni ssl. Je mettrai à jour mon commentaire ci-dessus.
sas
14
l'installation de xcode-select est assez bonne pour le système python. Mais cela ne fonctionne pas pour les environnements virtuels.
Andrew Martin le
3
Je pip install psycopg2viens de recevoir macOS Sierra 10.12, je viens de le faire et je viens de recevoir le même message d'erreur: 'ld: bibliothèque introuvable pour -lssl'. xcode-select --installrésolu le problème.
webtweakers
4
xcode-select --installCorrection du problème sur Sierra pour moi, également pour les environnements virtuels
Danra
5
vous devrez peut-être utiliser l'option --no-cache de pip. egenv LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
machow
59

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
IamAshay
la source
27

Lors de l'exécution, brew link opensslj'obtiens 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 pipcommande 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"
André Borie
la source
11

Avec MacOS Catalina 10.15.4, la seule commande qui a fonctionné pour moi était la suivante:

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2
Chris Ford
la source
A également travaillé sur Mojave. Je vous remercie!
sb9
Tu as sauvé mon temps.
sinwoobang
9

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
Isaac Philip
la source
la plupart des gens n'utilisent probablement pas zsh mais de toute façon, j'ai juste lancé echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .zshrc et c'était suffisant pour résoudre le problème sans changer les variables d'environnement LDFLAGS et CPPFLAGS
Mark Aquino
9

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 virtualenv python 3.7.4.

Ceci après la réinstallation de xcode et des outils de ligne de commande.

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

pmneve
la source
4

C'est le problème de la nouvelle version de macOs, où pip ne peut pas s'installer cryptography. Ce qui a résolu mon problème est de fournir l'environnement à la commande d'installation:

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

Vous pouvez remplacer <YOUR COMMAND HERE>par pip install cryptography, ou pip install <SOMETHING THAT REQUIRES cryptography>par exemple.

Crédit à cet article: Correction de l'erreur fatale macOS Sierra: fichier 'openssl / opensslv.h' ou 'openssl / aes.h' introuvable

Envil
la source
4

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

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

Utilisez brew info opensslpour obtenir des informations à jour.

Yngve Høiseth
la source
1

J'ai 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 a fonctionné, contrairement à 2.7.1.

dixon1e
la source
0

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 depuis PyPI:

$ pip install psycopg2-binary

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

Flimm
la source
0

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 référence: https://forums.developer.apple.com/thread/104296

ProfX
la source
Quelques remarques supplémentaires: j'avais installé le Xcode et les outils de ligne de commande. La commande xcode-select --install a montré que je les avais déjà installés, tout comme xcode-select -p et echo $? a renvoyé un 0, qui a également indiqué qu'ils étaient installés. J'utilise pyenv et pyenv-virtualenv, j'ai donc installé psycopg2 dans un environnement virtuel.
ProfX
0

J'ai eu cette même erreur et je l'ai résolue après avoir installé cython

Nili Waypa
la source
0

Exécuter PyCharm à partir de l'environnement conda, a résolu mon problème en utilisant:

--> 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

'''

carl du Plessis
la source
0

J'ai installé OpenSSL en utilisant MacPorts donc les répertoires ne sont pas comme ceux de Brew.

sudo port install openssl

J'ai trouvé les répertoires en faisant:

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

Ensuite, j'ai exporté les variables:

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

Vous devrez peut-être également:

xcode-select --install
DjAlan
la source
0

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

travaillé pour moi

au-delà du point de flottaison
la source
-4

J'ai réussi à résoudre ce problème en utilisant:

brew unlink openssl && brew link openssl --force

Je ne sais pas en quoi cela diffère de la désinstallation / des mises à niveau de brassage que j'ai effectuées sur OpenSSL lors de tentatives précédentes. Mon hypothèse est que ces opérations ont laissé certaines des bibliothèques partagées «défectueuses» qui empêchaient cela de fonctionner. Notez que cela a également résolu des problèmes lors de l'installation du module de cryptographie python.

ecordo
la source