помилка встановлення 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).


Запуск встановлення (або оновлення) пивоваріння openssl дає нижченаведене

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

Хтось може мені допомогти?


Відповіді:


285

Для тих, хто шукає рішення для цього на macOS Sierra 10.12 (або, швидше за все, пізніше): я виправив це, встановивши інструменти командного рядка:

xcode-select --install

Після цього pip install psycopg2слід попрацювати.

Якщо цього не відбувається, ви також можете спробувати зв’язатись з Brew's openssl:

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

з 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-cacheопцією pip, наприклад

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

5
Насправді, xcode-select --installможе бути достатньо, для цього слід використовувати надану систему ssl. Я оновлю свій коментар вище.
сас

13
Установка xcode-select досить хороша для системного пітона. Але це не працює для віртуальних середовищ.
Ендрю Мартін

3
Щойно отримав macOS Sierra 10.12, щойно зробив pip install psycopg2і щойно отримав те саме повідомлення про помилку: 'ld: бібліотека не знайдена для -lssl'. xcode-select --installвиправили проблему.
webtweakers

4
xcode-select --installвиправили проблему на Сьєррі для мене, також для віртуальних середовищ
Данра

5
Вам може знадобитися використовувати параметр --no-cache в pip. напр.env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
machow

58

У мене був встановлений OpenSSL від brew ( brew install 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"

10

З MacOS Catalina 10.15.4 наступна була єдиною командою, яка працювала для мене:

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

Працював і над Мохаве. Дякую!
sb9

Ви заощадили мій час.
sinwoobang

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, але все одно, я просто запустив ехо 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .zshrc, і цього було досить, щоб вирішити проблему без зміна середовища LDFLAGS і CPPFLAGS
Марк Аквіно

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"

Тоді вдалося встановити psycopg 2.8.3 в python 3.7.4 virtualenv.

Це після перевстановлення xcode та інструментів командного рядка.

Усі відповіді вище допомогли!


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

Використовуючи Fish, наступні дві команди вирішили цю проблему для мене після встановлення OpenSSL з Homebrew.

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

Використовуйте brew info opensslдля отримання актуальної інформації.


1

Нещодавно була ця проблема у Високій Сьєррі, щойно встановив Python 3.7 у virtualenv.

Рішення полягає у використанні пізнішої версії psycopg2. Версія 2.7.7 працювала, де 2.7.1 цього не робила.


0

Замість того, щоб встановлювати psycopg2, встановлювати psycopg2-binaryвід тих же авторів:

pip install psycopg2-binary

Ось що говорить документація про цей пакет PyPI:

Ви можете [...] отримати автономний пакет, не вимагаючи компілятора або зовнішніх бібліотек, встановивши psycopg2-бінарний пакет з PyPI:

$ pip install psycopg2-binary

Бінарний пакет є практичним вибором для розробки та тестування, але у виробництві рекомендується використовувати пакет, побудований з джерел.


0

Я мав цю проблему на Mojave. Mojave не створює каталог / usr / include, який необхідно встановити psycopg2. Це було не очевидно. Тут я знайшов рішення: Як оновити Xcode з командного рядка , на який посилаються: https://forums.developer.apple.com/thread/104296


Ще кілька зауважень: у мене були встановлені інструменти Xcode та командного рядка. Команда xcode-select --install показала, що я вже встановив їх, як і xcode-select -p, і echo $? повернув 0, що також вказало, що вони встановлені. Я використовую pyenv та pyenv-virtualenv, тому я встановив psycopg2 у віртуальне середовище.
ProfX

0

У мене була ця сама помилка, і я вирішив її вирішити після того, як я встановив cython на pip


0

Запуск PyCharm із середовища conda, вирішив мою проблему за допомогою:

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

Я встановив OpenSSL за допомогою MacPorts, тому каталоги не схожі на 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


-4

Мені вдалося виправити це за допомогою:

brew unlink openssl && brew link openssl --force

Я не впевнений, чим це відрізняється від видалення / оновлення заварки, що я робив на OpenSSL у попередніх спробах, які я робив. Я припускаю, що ці операції залишили деякі «несправні» спільні бібліотеки, які заважали цьому працювати. Зауважте, що це також вирішило проблеми з установкою криптографічного модуля python.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.