Fehler bei der Installation von psycopg2, Bibliothek für -lssl nicht gefunden


127

ich renne

sudo pip install psycopg2

und ich bekomme eine Menge Ausgabe, die aussieht wie:

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

Und am Ende steht:

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

Laufen easy_install oder es zu tun von der Quelle beide gibt mir den gleichen Fehler am Ende (den Teil über Bibliothek nicht für -lssl gefunden).


Wenn Sie die Brew-Installation (oder das Upgrade) von openssl ausführen, erhalten Sie Folgendes

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

Kann mir jemand helfen?


Antworten:


285

Für alle, die nach einer Lösung für dieses Problem unter macOS Sierra 10.12 suchen (oder höchstwahrscheinlich später): Ich habe dies durch die Installation der Befehlszeilentools behoben:

xcode-select --install

Danach pip install psycopg2sollte es funktionieren.

Wenn dies nicht der Fall ist, können Sie auch versuchen, eine Verknüpfung zu Brews openssl herzustellen:

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

mit openssl über brau installiert. Beachten Sie, dass das brew link openssl --forcenicht mehr funktioniert:

$ 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

Wie @macho weiter unten ausführt, müssen Sie möglicherweise die --no-cacheOption pip verwenden, z

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

5
Eigentlich xcode-select --installkann dies ausreichen, dies sollte das bereitgestellte System verwenden ssl. Ich werde meinen Kommentar oben aktualisieren.
Sas

13
Die Installation von xcode-select ist gut genug für die Systempython. In virtuellen Umgebungen funktioniert dies jedoch nicht.
Andrew Martin

3
pip install psycopg2Ich habe gerade macOS Sierra 10.12 erhalten, habe gerade die gleiche Fehlermeldung erhalten: 'ld: Bibliothek für -lssl nicht gefunden'. xcode-select --installDas Problem wurde behoben.
Webtweakers

4
xcode-select --installDas Problem in Sierra wurde für mich behoben, auch für virtuelle Umgebungen
Danra

4
Möglicherweise müssen Sie die Option --no-cache von pip verwenden. zBenv LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
machow

58

Ich hatte OpenSSL von Brew ( brew install openssl) installiert

Folgendes hat bei mir funktioniert:

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

26

Beim Laufen brew link opensslbekomme ich folgende Meldung:

$ 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

Wenn Sie diesen Rat befolgen, müssen Sie den folgenden pipBefehl verwenden:

$ 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

Was für mich funktioniert hat, war der Hinweis im Befehl zum Verknüpfen von 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

Die meisten Leute verwenden wahrscheinlich kein zsh, aber trotzdem habe ich nur echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .zshrc ausgeführt und das war genug, um das Problem ohne zu beheben Ändern der Umgebungsvariablen LDFLAGS und CPPFLAGS
Mark Aquino

9

Auf Mojave habe ich diese zum .bash_profile hinzugefügt

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"

war dann in der Lage, psycopg 2.8.3 in einem Python 3.7.4 virtualenv zu installieren.

Dies nach der Neuinstallation von xcode und den Befehlszeilentools.

Alle obigen Antworten haben geholfen!


9

Unter MacOS Catalina 10.15.4 war der folgende Befehl der einzige, der für mich funktioniert hat:

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

Arbeitete auch an Mojave. Danke dir!
sb9

Du hast meine Zeit gespart.
Sinwoobang

4

Dies ist das Problem der neuen MacO-Version, bei der pip nicht installiert werden kann cryptography. Was mein Problem behoben hat, ist die Bereitstellung der Umgebung für den Installationsbefehl:

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

Sie können ersetzen <YOUR COMMAND HERE>mit pip install cryptographyoder pip install <SOMETHING THAT REQUIRES cryptography>zum Beispiel.

Gutschrift für diesen Artikel: Behebung eines schwerwiegenden Fehlers in macOS Sierra: 'openssl / opensslv.h' oder 'openssl / aes.h' Datei nicht gefunden


4

Mit Fish haben die folgenden zwei Befehle dieses Problem für mich nach der Installation von OpenSSL mit Homebrew gelöst.

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

Verwenden Sie brew info openssldiese Option , um aktuelle Informationen zu erhalten.


1

Hatte kürzlich dieses Problem in High Sierra, nachdem ich gerade Python 3.7 in einer virtuellen Umgebung installiert hatte.

Die Lösung besteht darin, eine spätere Version von psycopg2 zu verwenden. Version 2.7.7 funktionierte, 2.7.1 nicht.


0

Anstatt zu installieren psycopg2, installieren Sie psycopg2-binaryvon denselben Autoren:

pip install psycopg2-binary

In der Dokumentation zu diesem PyPI-Paket heißt es:

Sie können [...] ein eigenständiges Paket erhalten, für das weder ein Compiler noch externe Bibliotheken erforderlich sind, indem Sie das psycopg2-Binärpaket von PyPI installieren:

$ pip install psycopg2-binary

Das Binärpaket ist eine praktische Wahl für die Entwicklung und das Testen. In der Produktion wird jedoch empfohlen, das aus Quellen erstellte Paket zu verwenden.


0

Ich hatte dieses Problem bei Mojave. Mojave erstellt kein Verzeichnis / usr / include, das psycopg2 installieren muss. Das war nicht offensichtlich. Ich habe die Lösung hier gefunden: So aktualisieren Sie Xcode über die Befehlszeile , auf die verwiesen wird: https://forums.developer.apple.com/thread/104296


Ein paar weitere Hinweise: Ich hatte den Xcode und die Kommandozeilen-Tools installiert. Der Befehl xcode-select --install zeigte an, dass ich sie bereits installiert hatte, ebenso wie xcode-select -p und echo $? gab eine 0 zurück, was auch anzeigt, dass sie installiert wurden. Ich verwende pyenv und pyenv-virtualenv, also habe ich psycopg2 in einer virtuellen Umgebung installiert.
ProfX

0

Ich hatte den gleichen Fehler und musste ihn beheben, nachdem ich Cython installiert hatte


0

Das Ausführen von PyCharm in einer Conda-Umgebung löste mein Problem mit:

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

Ich habe OpenSSL mit MacPorts installiert, daher sind Verzeichnisse nicht mit denen von Brew vergleichbar.

sudo port install openssl

Ich habe die Verzeichnisse gefunden, indem ich Folgendes getan habe:

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

Dann habe ich die Variablen exportiert:

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

Möglicherweise müssen Sie auch:

xcode-select --install


-4

Ich habe es geschafft, es zu beheben, indem ich:

brew unlink openssl && brew link openssl --force

Ich bin mir nicht sicher, wie sich dies von den Deinstallationen / Upgrades unterscheidet, die ich bei OpenSSL in früheren Versuchen durchgeführt habe. Ich gehe davon aus, dass diese Vorgänge einige der "fehlerhaften" gemeinsam genutzten Bibliotheken hinterlassen haben, die dies verhindert haben. Beachten Sie, dass dadurch auch Probleme bei der Installation des Python-Kryptografiemoduls behoben wurden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.