06. Пакетні менеджери і встановлення ПЗ¶
Довідник бонус-уроку «Linux для розробника»
Розділ перевірено: кожну команду виконано в контейнерах Ubuntu, Debian і python:3.12-slim. Урок з вправами — Бонус. Linux.
Навіщо це потрібно¶
На сервері немає App Store і немає .exe-файлів. Щоб встановити Nginx, Python, PostgreSQL або будь-яку іншу програму — використовують пакетний менеджер. Для Python-бібліотек — pip.
Розуміти різницю між системними і Python-пакетами — важливо, щоб не ламати середовище і не плутатися, звідки береться та чи інша версія Python або Django.
Два рівні пакетів¶
flowchart TD
classDef step fill:#eceff1,stroke:#546e7a,stroke-width:1px,color:#1a1a1a;
classDef decision fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#1a1a1a;
classDef success fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1a1a1a;
classDef error fill:#ffebee,stroke:#c62828,stroke-width:3px,color:#1a1a1a;
classDef warning fill:#fff8e1,stroke:#e65100,stroke-width:2px,color:#1a1a1a;
OS["Операційна система<br>(Ubuntu)"] --> APT["apt — системні програми:<br>Nginx, Python, Git, PostgreSQL"]
Python["Python-проєкт"] --> PIP["pip — Python-бібліотеки:<br>Django, requests, celery"]
APT --> System["Встановлюється в /usr/bin,<br>/usr/lib — для всієї системи"]
PIP --> Venv["Встановлювати у virtualenv<br>— ізольовано для проєкту"]
class OS,Python,APT,PIP,System step
class Venv success
aptвстановлює програми для операційної системи.pipвстановлює Python-бібліотеки для Python-проєкту.
apt — системний пакетний менеджер¶
Оновлення списку пакетів¶
Не встановлює нічого — тільки завантажує актуальний список доступних пакетів з репозиторіїв. Завжди виконуй передinstall.
Оновлення встановлених пакетів¶
Оновлює всі встановлені пакети до нових версій.Встановлення пакетів¶
sudo apt install nginx
sudo apt install python3
sudo apt install python3-venv
sudo apt install python3-pip
sudo apt install git
sudo apt install postgresql
sudo apt install redis-server
sudo apt install htop curl wget tree
Видалення пакетів¶
sudo apt remove nginx # видалити програму
sudo apt purge nginx # видалити + конфігураційні файли
sudo apt autoremove # видалити непотрібні залежності
Пошук пакета¶
apt search nginx
apt show nginx # детальна інформація про пакет
dpkg -l | grep nginx # чи встановлений пакет?
pip — Python пакетний менеджер¶
Встановлення бібліотек¶
Команди нижче — всередині активованого virtualenv (див. далі). У системний Python на Ubuntu 23.04+ / Debian 12+
pip installне встановить нічого:error: externally-managed-environment(PEP 668).
pip install django
pip install django==4.2.0 # конкретна версія
pip install "django>=4.0,<5.0" # діапазон версій
pip install django psycopg2-binary celery redis
Робота з requirements.txt¶
pip freeze # список всіх встановлених пакетів
pip freeze > requirements.txt # зберегти у файл
pip install -r requirements.txt # встановити з файлу
Інформація про пакет¶
pip show django # версія, залежності, розташування
pip list # всі встановлені пакети
pip list --outdated # що можна оновити
virtualenv — ізольоване Python-середовище¶
Чому virtualenv важливий¶
Без virtualenv pip install ставив би пакети в системний Python (у старих Ubuntu так і було; з Ubuntu 23.04 / Debian 12 pip це блокує — externally-managed-environment). Це проблема:
- Проєкт А вимагає
Django==3.2, Проєкт Б —Django==4.2. Конфлікт. - Ти оновив бібліотеку для одного проєкту — зламав інший.
- На production сервері встановлена не та версія.
Virtualenv ізолює бібліотеки для кожного проєкту:
flowchart TD
classDef step fill:#eceff1,stroke:#546e7a,stroke-width:1px,color:#1a1a1a;
classDef decision fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#1a1a1a;
classDef success fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1a1a1a;
classDef error fill:#ffebee,stroke:#c62828,stroke-width:3px,color:#1a1a1a;
classDef warning fill:#fff8e1,stroke:#e65100,stroke-width:2px,color:#1a1a1a;
System["Системний Python 3.11"] --> P1["project_A/.venv/<br>Django 3.2, pillow 9.0"]
System --> P2["project_B/.venv/<br>Django 4.2, pillow 10.0"]
System --> P3["project_C/.venv/<br>FastAPI, sqlalchemy"]
class System step
class P1,P2,P3 success
Команди virtualenv¶
# Створити virtualenv
python3 -m venv .venv
# Активувати (Linux/Mac)
source .venv/bin/activate
# Деактивувати
deactivate
# Після активації — встановити залежності
pip install -r requirements.txt
Після активації ти побачиш (.venv) перед prompt:
Де зберігати virtualenv¶
- Завжди в директорії проєкту:
.venv/ - Додай у
.gitignore— не комітити
Типова послідовність на новому сервері¶
# 1. Оновити систему
sudo apt update && sudo apt upgrade -y
# 2. Встановити системні залежності
sudo apt install python3 python3-venv python3-pip git nginx -y
# 3. Клонувати проєкт
git clone https://github.com/you/myproject.git
cd myproject
# 4. Створити virtualenv
python3 -m venv .venv
source .venv/bin/activate
# 5. Встановити Python-залежності
pip install -r requirements.txt
Типові помилки початківців¶
Помилка 1: Запускати pip install без активованого virtualenv
На Ubuntu 23.04+ / Debian 12+ отримаєш
error: externally-managed-environment(PEP 668); на старіших системах бібліотека встановиться в системний Python. Не обходь це через--break-system-packages— створи й активуй.venv. Перевіряй:which pip— має вказувати на.venv/bin/pip.
Помилка 2: pip: command not found
Використовуй
pip3абоpython3 -m pip, або встанови черезsudo apt install python3-pip.
Помилка 3: Не додати .venv у .gitignore
Virtualenv містить тисячі файлів і важить десятки–сотні МБ. Не потрібно в Git.
Помилка 4: Забути sudo apt update перед install
Без оновлення можеш встановити стару версію або отримати помилку "package not found".
Практичне завдання¶
Завдання 1¶
Переконайся, що обидві програми встановились.Завдання 2¶
mkdir ~/test_project && cd ~/test_project
python3 -m venv .venv
source .venv/bin/activate
pip install django
python -c "import django; print(django.__version__)"
pip freeze > requirements.txt
cat requirements.txt
deactivate
Завдання 3¶
Відкрий два термінали. В одному активуй virtualenv і введи which python. В іншому — без virtualenv (там python може не бути — тоді which python3). Порівняй результати.
Самоперевірка¶
- [ ] Я розумію різницю між
aptіpip - [ ] Я можу встановити системну програму через
apt install - [ ] Я можу створити і активувати virtualenv
- [ ] Я розумію, навіщо virtualenv потрібен для кожного проєкту
- [ ] Я вмію зберегти і відновити залежності через
pip freezeіrequirements.txt
Короткий підсумок¶
apt — для системних програм (Nginx, PostgreSQL, Git). pip — для Python-бібліотек (Django, requests). Virtualenv ізолює бібліотеки кожного проєкту. Завжди активуй .venv перед роботою з проєктом. Наступний крок — SSH і підключення до сервера.