Ошибка установки psycopg2, библиотека не найдена для -lssl

Я запускаю "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

Может ли кто-нибудь помочь мне?

Ответ 1

Для тех, кто ищет решение для этого в 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

с openssl, установленным через brew. Обратите внимание, что 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 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

Ответ 2

При запуске 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 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"

Ответ 3

У меня был установлен OpenSSL из brew (brew install openssl)

У меня сработало следующее:

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

Ответ 4

Что сработало для меня, так это подсказка, указанная в команде для связи 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

Ответ 5

На мохаве я добавил их в .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 и инструментов командной строки.

Все ответы выше помогли!

Ответ 6

Недавно эта проблема возникла в High Sierra, только что установив Python 3.7 в virtualenv.

Решение состоит в том, чтобы использовать более позднюю версию psycopg2. Версия 2.7.7 работала, а 2.7.1 - нет.

Ответ 7

Используя Fish, следующие две команды решили эту проблему для меня после установки OpenSSL с помощью Homebrew.

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

Используйте brew info openssl для получения актуальной информации.

Ответ 8

Вместо установки psycopg2, установите psycopg2-binary от тех же авторов:

pip install psycopg2-binary

Вот что говорится в документации об этом пакете PyPI:

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

$ pip install psycopg2-binary

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

Ответ 10

Это проблема новой версии macOs, где pip не может установить cryptography. Что исправило мою проблему, так это предоставив env для команды установки:

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" не найден

Ответ 11

Мне удалось исправить это, используя:

brew unlink openssl && brew link openssl --force

Я не уверен, как это отличается от brew удаления/обновления, которые я делал в OpenSSL в предыдущих попытках, которые я сделал. Мое предположение заключается в том, что эти операции оставили некоторые из "ошибочных" разделяемых библиотек, которые мешали этому работать. Обратите внимание, что это также устраняет проблемы с установкой модуля криптографии python.