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

128

я бегу

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 install (или upgrade) openssl дает следующее

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

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

tscizzle
источник
Возможный дубликат python install lxml на mac os 10.10.1
IamAshay

Ответы:

286

Для тех, кто ищет решение этой проблемы в macOS Sierra 10.12 (или более поздней версии, скорее всего): я исправил это, установив инструменты командной строки:

xcode-select --install

После этого pip install psycopg2должно работать.

Если это не так, вы также можете попытаться создать ссылку на openssl brew:

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'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. Я обновлю свой комментарий выше.
sas
14
Установка xcode-select достаточно хороша для системного Python. Но для виртуальных сред это не работает.
Эндрю Мартин
3
Только что получил macOS Sierra 10.12, только pip install psycopg2что получил и только что получил то же сообщение об ошибке: «ld: library not found for -lssl». xcode-select --installисправил проблему.
webtweakers
4
xcode-select --installисправлена ​​проблема с Sierra для меня, также для виртуальных сред
Данра
5
вам может потребоваться использовать параметр --no-cache команды pip. напримерenv LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
machow 01
59

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

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

export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
pip install psycopg2
IamAshay
источник
27

При запуске 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"
Андре Бори
источник
11

В 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, но в любом случае я просто запустил echo '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.

Это после переустановки xcode и инструментов командной строки.

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

pmneve
источник
4

Это проблема новой версии 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 не найден

Envil
источник
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

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

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

dixon1e
источник
0

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

pip install psycopg2-binary

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

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

$ pip install psycopg2-binary

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

Флимм
источник
0

У меня была эта проблема в Мохаве. Mojave не создает каталог / usr / include, который нужно установить psycopg2. Это было неочевидно. Я нашел решение здесь: Как обновить Xcode из командной строки , которая ссылается: https://forums.developer.apple.com/thread/104296

ProfX
источник
Еще несколько примечаний: у меня были установлены Xcode и инструменты командной строки. Команда xcode-select --install показала, что они у меня уже были установлены, как и xcode-select -p и echo $? вернул 0, что также означает, что они были установлены. Я использую pyenv и pyenv-virtualenv, поэтому я установил psycopg2 в виртуальную среду.
ProfX 01
0

У меня была такая же ошибка, и я решил ее разрешить после того, как я установил cython

Нили Вайпа
источник
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
DjAlan
источник
0

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

работал на меня

beyondfloatingpoint
источник
-4

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

brew unlink openssl && brew link openssl --force

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

ecordo
источник