Привіт, я Kernelka! Сьогодні покажу, як зробити стабільне та передбачуване середовище для Python у Linux: керуватимемо версіями через pyenv, ізолюватимемо залежності у venv та, за потреби, запакуємо все в Docker для 100% відтворюваності. Це мій базовий сетап для щоденної розробки — просто, надійно і швидко 🐍
Покроковий How‑to: pyenv + venv
1) Підготуємо інструменти збірки
На Ubuntu/Debian відкрийте термінал Linux і встановіть залежності для компіляції Python (потрібно для pyenv):
sudo apt update
sudo apt install -y \
build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev \
libsqlite3-dev curl git libncursesw5-dev xz-utils tk-dev \
libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
Для інших дистрибутивів поставте еквівалентні пакети (наприклад, у Fedora — групи Development Tools і відповідні -devel бібліотеки).
2) Встановлюємо pyenv
pyenv дозволяє мати декілька версій Python паралельно — це мастхев для python в Linux.
curl https://pyenv.run | bash
# Додайте в ~/.bashrc або ~/.zshrc
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
# Перезапустіть оболонку або
source ~/.bashrc # або ~/.zshrc
# Перевірка
pyenv --version
Тепер ставимо потрібну версію Python (наприклад 3.12.x) і робимо її локальною для проєкту:
pyenv install 3.12.7
mkdir -p ~/projects/myapp && cd ~/projects/myapp
pyenv local 3.12.7
python --version # має показати 3.12.7
3) Створюємо ізольоване середовище venv
Кожен проєкт — свій віртуальний світ. Це стабільність і чистота залежностей у щоденній розробка на Linux рути ні.
python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
# Встановлюємо залежності проєкту, якщо є файл
pip install -r requirements.txt # або додавайте пакети по одному
# Фіксуємо точні версії для повторюваності
pip freeze > requirements.lock.txt
Порада: додайте .venv до .gitignore та зберігайте лише requirements.lock.txt або requirements.txt.
4) Зручні хелпери (не обов’язково)
- Автоактивація: додаток
direnvавтоматично активує.venvпри вході в теку проєкту. - Окремі інструменти: ставте утиліти для розробки через
pipx, щоб не засмічувати venv.
Docker як шар броні
Коли важлива повна відтворюваність (на CI, продакшн, колективна робота) — Docker на Linux рятує. Не обов’язково писати Dockerfile для старту — можна використати офіційний образ Python:
# Запускаємо проєкт в контейнері з монтуванням коду
cd ~/projects/myapp
docker run -it --rm -v "$PWD":/app -w /app python:3.12-slim bash
# Всередині контейнера
pip install --upgrade pip
pip install -r requirements.txt
python -m pytest # приклад команд
python app.py
Плюси: сталі версії, однаково працює на всіх машинах, легко повторити у CI/CD. Мінуси: трохи повільніше з файловими монтуваннями та більше місця на диску.
Альтернативні способи
- Системний Python + venv: швидко, але обмежено версіями, що дає дистрибутив. Ризик «зламати» системні пакети.
- Conda/Miniforge: зручно для наукових обчислень, де потрібні нативні бібліотеки. Мінус — важчі середовища.
- asdf-vm: один менеджер версій для багатьох мов (Python/Node/Go). Якщо любите універсальність — ок.
GUI-спосіб: VS Code
Якщо більше любите кліки ніж конфіги — у VS Code все просто:
- Встановіть розширення Python.
- Відкрийте теку проєкту та оберіть інтерпретатор: Command Palette → Python: Select Interpreter → вкажіть
.venv/bin/python. - Для контейнерів поставте розширення Dev Containers: Command Palette → Dev Containers: Open Folder in Container → оберіть базовий Python контейнер.
Так ви отримуєте зручний GUI-інтерфейс і при цьому всю міць інструментів під капотом.
FAQ
pyenv не встановлює Python: помилки про OpenSSL/SQLite?
Ймовірно, бракує dev-пакетів. Перевірте, що встановили libssl-dev, zlib1g-dev, libsqlite3-dev, libbz2-dev, libffi-dev, libreadline-dev, xz-utils, tk-dev, liblzma-dev, libncursesw5-dev.
Після встановлення pyenv команда не знаходиться
Скоріш за все, ви не додали ініціалізацію у ~/.bashrc або не перезапустили сесію. Додайте рядки з інструкції та виконайте source ~/.bashrc.
Чим відрізняється pyenv global від pyenv local?
global змінює дефолтну версію Python для всього користувача, local записує потрібну версію в файл .python-version в поточній теці проєкту.
Де зберігати venv: в репозиторії чи ні?
Не зберігайте .venv у git. Краще тримати requirements.txt або requirements.lock.txt і відтворювати середовище.
У Docker інсталяція пакетів повільна
Кешуйте залежності: запускайте pip install --no-cache-dir лише коли справді треба; для локальної розробки використовуйте звичайний кеш, або збережіть теку ~/.cache/pip як volume.
Проблеми з правами у змонтованих тек (Linux)
Додайте запуск контейнера з вашим UID/GID: docker run -u $(id -u):$(id -g), щоб файли створювалися з правильними власниками.
Чи можна поєднати venv і Docker?
Для продакшн-образів краще без venv — просто система пакунків + pip у окремій текі. Для локальної розробки в контейнері venv не заважає, але й не обов’язковий.
Порада від Kernelka
Зробіть стартовий скрипт, щоб новачок у команді виконав одну команду і отримав все готове. Наприклад:
#!/usr/bin/env bash
set -euo pipefail
# 1) Переконатися, що є правильний Python через pyenv
PY=3.12.7
if ! pyenv versions --bare | grep -q "$PY"; then
pyenv install "$PY"
fi
pyenv local "$PY"
# 2) Venv
python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
# 3) Залежності
if [ -f requirements.lock.txt ]; then
pip install -r requirements.lock.txt
elif [ -f requirements.txt ]; then
pip install -r requirements.txt
fi
echo "✅ Середовище готове!"
Так ви мінімізуєте помилки та прискорите онбординг. Маленький скрипт — велика економія часу 💡
Підсумок
- pyenv дає паралельні версії Python без болю.
- venv ізолює залежності для кожного проєкту.
- Docker забезпечує відтворюваність середовища й простий перенос у CI/CD.
- VS Code з Python/Dev Containers робить робочий процес зручним у GUI.
- Фіксуйте версії залежностей і автоматизуйте старт скриптом.
- Використовуйте термінал Linux для швидких дій і точного контролю.
Ось так я будую стабільний стек для Python в Linux: просто, повторювано і приємно. Якщо маєте питання — питайте в коментах!

Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.