VPS servery

Python na VPS: venv a služba systemd

Jak na VPS nainstalovat Python balíčky bez chyby „externally-managed-environment“ a spustit bota nebo skript jako službu.

2 min čtení·Aktualizováno 28. října 2026

Na novějším Debianu a Ubuntu skončí pip install chybou externally-managed-environment. Systém tím chrání své vlastní balíčky. Správné řešení je virtuální prostředí (venv), ne přepínač --break-system-packages.

1. Příprava

apt update
apt install -y python3 python3-venv python3-pip
adduser --system --group --home /opt/muj-bot bot

Soubory bota (app.py, requirements.txt, .env) nahraj do /opt/muj-bot – viz Přenos souborů na VPS.

2. Virtuální prostředí

cd /opt/muj-bot
python3 -m venv venv
venv/bin/pip install -r requirements.txt
chown -R bot:bot /opt/muj-bot
chmod 600 /opt/muj-bot/.env

Pro ruční práci prostředí aktivuj příkazem source venv/bin/activate – python a pip pak patří do něj. Ven se dostaneš příkazem deactivate.

3. Služba systemd

Vytvoř /etc/systemd/system/muj-bot.service:

[Unit]
Description=Muj Python bot
After=network-online.target
Wants=network-online.target

[Service]
User=bot
WorkingDirectory=/opt/muj-bot
ExecStart=/opt/muj-bot/venv/bin/python app.py
Environment=PYTHONUNBUFFERED=1
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now muj-bot

Bot se teď spustí po restartu VPS a po pádu se do 5 sekund nastartuje znovu. Díky PYTHONUNBUFFERED=1 uvidíš výpisy z print() v logu hned.

Ovládání

PříkazCo dělá
systemctl status muj-botjestli běží a poslední řádky logu
journalctl -u muj-bot -fživý log
systemctl restart muj-botrestart po změně kódu
systemctl stop muj-botzastavení

Nový balíček přidej do requirements.txt, nainstaluj ho přes venv/bin/pip install -r requirements.txt a službu restartuj.

Token načítej z .env balíčkem python-dotenv (viz Tajné údaje v .env), nikdy ho nepiš přímo do kódu.

VPS od 299 Kč měsíčně

Vlastní virtuální server s root přístupem pro cokoliv, co potřebujete.

Zobrazit balíčky