Решение проблемы: "library not found for -lssl" в psycopg2
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Если при установке psycopg2
появляется ошибка, связанная с отсутствием SSL-библиотек, следует выполнить следующие команды:
- Для Ubuntu/Debian:
sudo apt-get install libpq-dev libssl-dev
- Для Red Hat/CentOS:
sudo yum install postgresql-devel openssl-devel
- Для macOS:
brew install postgresql openssl
Пользователи macOS также должны настроить переменные окружения:
export LDFLAGS="-L$(brew --prefix openssl)/lib"
export CPPFLAGS="-I$(brew --prefix openssl)/include"
После этого установка psycopg2
через pip должна осуществиться без проблем:
pip install psycopg2
В качестве альтернативы вы можете воспользоваться бинарной версией пакета:
pip install psycopg2-binary
Перед установкой убедитесь, что вы установили заголовочные файлы Python и PostgreSQL.
Специфика настройки для macOS и Apple M1
Владельцам macOS, особенно с процессором Apple M1, необходимо скорректировать пути после установки openssl
с использованием Homebrew, чтобы учесть переход с архитектуры Intel на ARM. Для этого настройте переменные окружения:
export LDFLAGS="-L/opt/homebrew/opt/openssl/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl/include"
Также добавьте путь к OpenSSL в переменную окружения PATH
:
export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"
Оминание кэша при установке
Можно столкнуться с проблемами, связанными с кэшем, при установке psycopg2
. В этом случае используйте опцию --no-cache-dir
:
pip install --no-cache-dir psycopg2
Инструменты командной строки Xcode
Для сборки из исходных кодов необходимы компиляторы C, которые можно получить через инструменты командной строки Xcode на macOS:
xcode-select --install
Особенности настройки для macOS Catalina и более новых версий
В macOS Catalina и более новых системах может потребоваться настройка дополнительных переменных окружения из-за изменений в системе безопасности и управлении зависимостями.
Работа с OpenSSL от Homebrew
Чтобы избежать конфликтов, задайте пути к библиотекам OpenSSL с помощью переменных окружения, не используя команду brew link openssl --force
.
Инициализация переменных окружения через pipenv
Чтобы переменные окружения учитывались при компиляции, инициализируйте их перед установкой с использованием pipenv:
pipenv install psycopg2 --dev
Визуализация
Представим ситуацию, как если бы вы строили мост, у которого отсутствует одна из опор:
🌉 Строительство моста | 🏗️ Недостающая опора | Результат |
---|---|---|
Мост построен | Опора установлена | Мост устойчив |
Мост построен | ❓ | Мост рушится |
В подобном контексте отсутствующая библиотека -lssl
оказывается той самой недостающей опорой для psycopg2
.
import psycopg2 # Попытаемся построить мост psycopg2...
# 🚨 Ошибка: Где же моя опора -lssl?!
Чтобы "мост" был устойчив, вам необходимо обеспечить надежное SSL-соединение.
Решение проще простого:
- Установите SSL-библиотеку: 🔒
- Установите
psycopg2
: 🌉🎉
С правильно настроенным SSL ваш "мост" справится с любыми нагрузками. 💪
Версия OpenSSL и важность совместимости
Psycopg2 может требовать определенной версии OpenSSL. Убедитесь, что установленная версия OpenSSL соответствует требованиям библиотеки:
openssl version
Использование опций для build_ext
При установке через pip используйте опции build_ext
для задания путей к заголовочным файлам и библиотекам:
pip install psycopg2 --global-option=build_ext --global-option="-L/opt/homebrew/opt/openssl/lib" --global-option="-I/opt/homebrew/opt/openssl/include"