Ошибка установки 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
Бинарный пакет является практическим выбором для разработки и тестирования, но при производстве рекомендуется использовать пакет, созданный из исходных текстов.
Ответ 9
У меня была эта проблема на Мохаве. Mojave не создает каталог /usr/include, который нужно установить psycopg2. Это было не очевидно. Я нашел решение здесь:
Как обновить XCode из командной строки, которая ссылается на:https://forums.developer.apple.com/thread/104296
Ответ 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.