Подробный гайд по развёртыванию среды разработки Python 3.12 на CentOS 7 - Часть 5

Подробный гайд по развёртыванию среды разработки Python 3.12 на CentOS 7: сборка OpenSSL 1.1.1, создание venv, настройка линтеров и подключение IDE.

2026.10.02                  


Подробный гайд по развёртыванию среды разработки Python 3.12 на CentOS 7 - Часть 5Подробный гайд по развёртыванию среды разработки Python 3.12 на CentOS 7 - Часть 5

26. Типичные ошибки и решения

26.1. yum не может найти репозиторий

Ошибка вида:

Cannot find a valid baseurl for repo: base/7/x86_64

Решение:

sudo sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-*.repo
sudo sed -i 's|^#baseurl=http://mirror.centos.org/centos|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*.repo
sudo sed -i 's|^baseurl=http://mirror.centos.org/centos|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*.repo
sudo yum clean all
sudo yum makecache



26.2. Python собирается без модуля _ssl

Симптом:

ModuleNotFoundError: No module named '_ssl'

Или:

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

Решение: пересобрать Python с указанием OpenSSL:

./configure \
    --prefix=/opt/python-${PY_VER} \
    --enable-optimizations \
    --with-ensurepip=install \
    --with-openssl=/usr/local/openssl-1.1.1 \
    --with-openssl-rpath=auto

Затем:

make -j"$(nproc)"
sudo make altinstall

Проверьте:

python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"

26.3. Отсутствует модуль _ctypes

Ошибка:

ModuleNotFoundError: No module named '_ctypes'

Решение:

sudo yum install -y libffi-devel

Затем пересоберите Python.


26.4. Отсутствует модуль _lzma

Ошибка:

ModuleNotFoundError: No module named '_lzma'

Решение:

sudo yum install -y xz-devel

Затем пересоберите Python.


26.5. Отсутствует модуль _sqlite3

Ошибка:

ModuleNotFoundError: No module named '_sqlite3'

Решение:

sudo yum install -y sqlite-devel

Затем пересоберите Python.


26.6. Отсутствует модуль readline

Симптомы:

ModuleNotFoundError: No module named 'readline'

или плохая работа интерактивной консоли.

Решение:

sudo yum install -y readline-devel

Затем пересоберите Python.


26.7. Ошибки при сборке пакетов через pip

Если пакет пытается компилироваться и падает, чаще всего не хватает системных зависимостей.

Обычно помогают:

sudo yum groupinstall -y "Development Tools"
sudo yum install -y \
    zlib-devel \
    bzip2-devel \
    xz-devel \
    libffi-devel \
    sqlite-devel \
    readline-devel

Для некоторых пакетов дополнительно нужны:

sudo yum install -y \
    freetype-devel \
    libpng-devel \
    gcc-c++

26.8. Ошибка GLIBC_2.28 not found

CentOS 7 использует старую версию glibc — обычно 2.17. Некоторые современные пакеты распространяются только в бинарных сборках, рассчитанных на более новые дистрибутивы.

Варианты решения:

  1. Установить более старую версию пакета.
  2. Установить пакет из исходников.
  3. Использовать контейнер с более новой ОС.
  4. Перейти на более новую ОС.

26.9. python3 указывает не на тот интерпретатор

Проверьте:

which python3

Должно быть:

/usr/local/bin/python3

Если показывается старый системный вариант, выполните:

hash -r
echo $PATH

Убедитесь, что /usr/local/bin находится раньше /usr/bin.


26.10. pip пишет Permission denied

Не используйте sudo pip внутри проекта.

Правильно:

python3 -m venv .venv
source .venv/bin/activate
pip install package_name

26.11. Ошибки SSL при загрузке исходников

Например:

SSL certificate problem

Или:

certificate verify failed

Обновите сертификаты:

sudo yum install -y ca-certificates
sudo update-ca-trust

Если не помогает, скачайте архив вручную на другой машине и перенесите на сервер.


27. Обновление Python на новую минорную версию

Например, установлена:

Python 3.12.7

Вышла новая версия:

Python 3.12.8

Общий порядок:

PY_VER=3.12.8
PY_MAJOR=3.12
cd ~/src
wget https://www.python.org/ftp/python/${PY_VER}/Python-${PY_VER}.tgz
tar xzf Python-${PY_VER}.tgz
cd Python-${PY_VER}
./configure \
    --prefix=/opt/python-${PY_VER} \
    --enable-optimizations \
    --with-ensurepip=install \
    --with-openssl=/usr/local/openssl-1.1.1 \
    --with-openssl-rpath=auto
make -j"$(nproc)"
sudo make altinstall

Обновите симлинки:

sudo ln -sfn /opt/python-${PY_VER}/bin/python${PY_MAJOR} /usr/local/bin/python${PY_MAJOR}
sudo ln -sfn /opt/python-${PY_VER}/bin/pip${PY_MAJOR} /usr/local/bin/pip${PY_MAJOR}
sudo ln -sfn /opt/python-${PY_VER}/bin/python${PY_MAJOR} /usr/local/bin/python3
sudo ln -sfn /opt/python-${PY_VER}/bin/pip${PY_MAJOR} /usr/local/bin/pip3


После обновления минорной версии Python рекомендуется пересоздать виртуальные окружения проектов:

cd ~/projects/demo
rm -rf .venv
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip setuptools wheel
pip install -r requirements.txt

28. Удаление установленной версии Python

Если нужно удалить конкретную установленную версию:

sudo rm -rf /opt/python-3.12.7

Удалите связанные симлинки, если они больше не нужны:

sudo rm -f /usr/local/bin/python3.12
sudo rm -f /usr/local/bin/pip3.12

Будьте осторожны: не удаляйте системный /usr/bin/python.


29. Альтернативные варианты установки

29.1. Сборка из исходников

Рекомендуемый вариант для CentOS 7, если нужен актуальный Python.

Плюсы:

  • контролируемая версия;
  • не зависит от старых пакетов репозитория;
  • можно собрать с нужным OpenSSL.

Минусы:

  • дольше установка;
  • нужно вручную обновлять версии.

29.2. pyenv

Хорош, если нужно много версий Python.

Плюсы:

  • удобно переключаться между версиями;
  • версии ставятся в домашний каталог;
  • хорошо подходит для разработки.

Минусы:

  • всё равно требует зависимости для сборки;
  • нужно следить за совместимостью пакетов.

29.3. Системные пакеты и SCL

В CentOS 7 были пакеты python3 и Software Collections, например rh-python38. Но это устаревшие версии, а после окончания поддержки репозитории работают нестабильно или недоступны. Для реальной разработки в 2026 году этот вариант не рекомендуется.


29.4. Контейнеры

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

Например:

docker run -it --rm -v "$PWD":/app -w /app python:3.12 bash

Но для этого нужно заранее установить и настроить контейнерную среду. На старой ОС это отдельная задача.


30. Безопасность

Так как CentOS 7 больше не получает обновлений безопасности, соблюдайте минимальные меры:

  1. Не выставляйте сервер напрямую в интернет.
  2. Используйте SSH-ключи.
  3. Отключите вход по паролю в SSH, если это допустимо.

4. Используйте только локальные порты для разработки:

127.0.0.1

5. Для доступа к веб-интерфейсам используйте SSH-туннели:

ssh -L 8888:127.0.0.1:8888 dev@server_address
  1. Не храните секреты в коде.

7. Регулярно делайте резервные копии каталогов:

/home/dev
/opt/python-*
/etc

31. Итоговый чек-лист

Проверьте, что выполнено:

yum repolist
gcc --version
make --version
/usr/local/openssl-1.1.1/bin/openssl version
python3 --version
python3 -m pip --version
python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"
python3 -c "import sqlite3, ctypes, lzma, bz2, readline; print('Python OK')"

Пример ожидаемых результатов:

Python 3.12.7
pip 24.x
OpenSSL 1.1.1w
Python OK

И создайте проект:

mkdir -p ~/projects/demo
cd ~/projects/demo
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip setuptools wheel
pip install requests pytest ruff

Если всё выполнено без ошибок — локальная среда разработки для Python 3 на CentOS 7 настроена.


Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта