Русский (Russian)

Python, pip и виртуальные окружения на VPS с Ubuntu 24.04

2 min
VPS/VDS-хостинг

В Ubuntu 24.04 поставляется Python 3.12, но установка пакетов обычным pip теперь завершается ошибкой «externally-managed-environment». Решение — изолировать каждый проект в виртуальном окружении. В руководстве показано, как подготовить VPS Linux Infrawire, правильно управлять зависимостями и держать приложение запущенным как службу systemd.

📋 Требования

  • VPS с Ubuntu 24.04 или Debian 12 и доступом по SSH под root (IP-адрес и пароль root есть в вашем личном кабинете)
  • Python-проект или простой скрипт для проверки
  • Базовые навыки работы в командной строке

1. Установка Python 3, pip и venv

Python 3 обычно уже установлен, но pip и модуль venv — отдельные пакеты.

Bash
apt update apt install -y python3 python3-pip python3-venv python3-dev build-essential python3 --version pip3 --version

2. Что означает ошибка PEP 668

Если выполнить pip install requests под root в Ubuntu 24.04 или Debian 12, появится:

TEXT
error: externally-managed-environment

Эта защита (PEP 668) не даёт pip перезаписывать файлы, которыми управляет apt, и ломать системные утилиты. Не обходите её через --break-system-packages. Используйте один из трёх чистых способов ниже.

3. Создание виртуального окружения

Виртуальное окружение — это отдельная копия Python и pip для одного проекта.

Bash
mkdir -p /opt/myapp && cd /opt/myapp python3 -m venv venv source venv/bin/activate pip install --upgrade pip pip install requests flask gunicorn

Приглашение теперь начинается с (venv). Выйти из окружения можно командой deactivate.

4. Управление зависимостями через requirements.txt

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

Bash
pip freeze > requirements.txt # На чистой машине python3 -m venv venv source venv/bin/activate pip install -r requirements.txt

5. Установка консольных утилит через pipx

Для самостоятельных утилит (httpie, yt-dlp, black...) pipx выделяет каждой собственное скрытое виртуальное окружение и делает команду доступной глобально.

Bash
apt install -y pipx pipx ensurepath pipx install httpie

После этого откройте новую сессию, чтобы загрузился обновлённый PATH. Для библиотеки, у которой есть пакет Debian, подходит и apt install python3-requests.

6. Запуск приложения как службы systemd

Создайте отдельного непривилегированного пользователя, затем юнит, который запускает интерпретатор из виртуального окружения (здесь Gunicorn обслуживает объект Flask с именем app из app.py).

Bash
useradd --system --home /opt/myapp --shell /usr/sbin/nologin myapp chown -R myapp:myapp /opt/myapp

Создайте файл /etc/systemd/system/myapp.service:

INI
1[Unit] 2Description=My Python application 3After=network.target 4 5[Service] 6User=myapp 7WorkingDirectory=/opt/myapp 8ExecStart=/opt/myapp/venv/bin/gunicorn --bind 127.0.0.1:8000 app:app 9Restart=on-failure 10RestartSec=5 11 12[Install] 13WantedBy=multi-user.target
Bash
systemctl daemon-reload systemctl enable --now myapp

Поставьте перед портом 8000 обратный прокси, например nginx, чтобы открыть приложение в интернете.

✅ Проверка

Bash
which python # при активном окружении должен указывать внутрь /opt/myapp/venv pip list systemctl status myapp --no-pager journalctl -u myapp -n 50 --no-pager curl -I http://127.0.0.1:8000

🔧 Устранение неполадок

The virtual environment was not created successfully because ensurepip is not available : не установлен пакет venv. Поставьте его командой apt install python3-venv (или python3.12-venv) и повторите команду.

status=203/EXEC в systemd : путь в ExecStart неверен либо файл недоступен для запуска пользователю службы. Проверьте ls -l /opt/myapp/venv/bin/gunicorn и права, заданные ранее.

ModuleNotFoundError только под systemd : служба использует системный Python вместо виртуального окружения. Всегда указывайте в ExecStart /opt/myapp/venv/bin/python или файл из venv/bin.

pip: command not found : используйте python3 -m pip или сначала активируйте виртуальное окружение.


🎉 Ваши Python-проекты теперь изолированы, воспроизводимы и работают как надёжная служба!

Следите за последними предложениями, скидками и специальными акциями.

Смотреть акции

Мы используем файлы cookie

Аналитические cookie улучшают работу сайта. Данные не продаются третьим лицам. Подробнее в политике конфиденциальности.