Решение проблемы: "library not found for -lssl" в psycopg2

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если при установке 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 также должны настроить переменные окружения:

Bash
Скопировать код
export LDFLAGS="-L$(brew --prefix openssl)/lib"
export CPPFLAGS="-I$(brew --prefix openssl)/include"

После этого установка psycopg2 через pip должна осуществиться без проблем:

Bash
Скопировать код
pip install psycopg2

В качестве альтернативы вы можете воспользоваться бинарной версией пакета:

Bash
Скопировать код
pip install psycopg2-binary

Перед установкой убедитесь, что вы установили заголовочные файлы Python и PostgreSQL.

Кинга Идем в IT: пошаговый план для смены профессии

Специфика настройки для macOS и Apple M1

Владельцам macOS, особенно с процессором Apple M1, необходимо скорректировать пути после установки openssl с использованием Homebrew, чтобы учесть переход с архитектуры Intel на ARM. Для этого настройте переменные окружения:

Bash
Скопировать код
export LDFLAGS="-L/opt/homebrew/opt/openssl/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl/include"

Также добавьте путь к OpenSSL в переменную окружения PATH:

Bash
Скопировать код
export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"

Оминание кэша при установке

Можно столкнуться с проблемами, связанными с кэшем, при установке psycopg2. В этом случае используйте опцию --no-cache-dir:

Bash
Скопировать код
pip install --no-cache-dir psycopg2

Инструменты командной строки Xcode

Для сборки из исходных кодов необходимы компиляторы C, которые можно получить через инструменты командной строки Xcode на macOS:

Bash
Скопировать код
xcode-select --install

Особенности настройки для macOS Catalina и более новых версий

В macOS Catalina и более новых системах может потребоваться настройка дополнительных переменных окружения из-за изменений в системе безопасности и управлении зависимостями.

Работа с OpenSSL от Homebrew

Чтобы избежать конфликтов, задайте пути к библиотекам OpenSSL с помощью переменных окружения, не используя команду brew link openssl --force.

Инициализация переменных окружения через pipenv

Чтобы переменные окружения учитывались при компиляции, инициализируйте их перед установкой с использованием pipenv:

Bash
Скопировать код
pipenv install psycopg2 --dev

Визуализация

Представим ситуацию, как если бы вы строили мост, у которого отсутствует одна из опор:

🌉 Строительство моста🏗️ Недостающая опораРезультат
Мост построенОпора установленаМост устойчив
Мост построенМост рушится

В подобном контексте отсутствующая библиотека -lssl оказывается той самой недостающей опорой для psycopg2.

Python
Скопировать код
import psycopg2  # Попытаемся построить мост psycopg2...
# 🚨 Ошибка: Где же моя опора -lssl?!

Чтобы "мост" был устойчив, вам необходимо обеспечить надежное SSL-соединение.

Решение проще простого:

  1. Установите SSL-библиотеку: 🔒
  2. Установите psycopg2: 🌉🎉

С правильно настроенным SSL ваш "мост" справится с любыми нагрузками. 💪

Версия OpenSSL и важность совместимости

Psycopg2 может требовать определенной версии OpenSSL. Убедитесь, что установленная версия OpenSSL соответствует требованиям библиотеки:

Bash
Скопировать код
openssl version

Использование опций для build_ext

При установке через pip используйте опции build_ext для задания путей к заголовочным файлам и библиотекам:

Bash
Скопировать код
pip install psycopg2 --global-option=build_ext --global-option="-L/opt/homebrew/opt/openssl/lib" --global-option="-I/opt/homebrew/opt/openssl/include"

Полезные материалы

  1. Документация Psycopg 2.9.9 по установке
  2. Ошибка при установке psycopg2 – библиотека не найдена для -lssl – Stack Overflow
  3. Документация для разработчиков от Apple
  4. Homebrew — недостающий менеджер пакетов для macOS (или Linux)
  5. Скачивание PostgreSQL
  6. Введение в виртуальные окружения Python – Real Python