Подробный гайд по развёртыванию среды разработки 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. Некоторые современные пакеты распространяются только в бинарных сборках, рассчитанных на более новые дистрибутивы.
Варианты решения:
- Установить более старую версию пакета.
- Установить пакет из исходников.
- Использовать контейнер с более новой ОС.
- Перейти на более новую ОС.
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 больше не получает обновлений безопасности, соблюдайте минимальные меры:
- Не выставляйте сервер напрямую в интернет.
- Используйте SSH-ключи.
- Отключите вход по паролю в SSH, если это допустимо.
4. Используйте только локальные порты для разработки:
127.0.0.1
5. Для доступа к веб-интерфейсам используйте SSH-туннели:
ssh -L 8888:127.0.0.1:8888 dev@server_address
- Не храните секреты в коде.
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 настроена.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.