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říkaz | Co dělá |
|---|---|
systemctl status muj-bot | jestli běží a poslední řádky logu |
journalctl -u muj-bot -f | živý log |
systemctl restart muj-bot | restart po změně kódu |
systemctl stop muj-bot | zastavení |
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.envbalíčkempython-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.