- Home »

Запуск Python-скрипта на Ubuntu — пошаговое руководство
Запуск Python-скриптов на Ubuntu — это база, которую должен знать каждый системный администратор. Неважно, настраиваете ли вы систему мониторинга, автоматизируете рутинные задачи или разворачиваете веб-приложение — знание того, как правильно запускать Python-код в Linux-окружении, сэкономит вам кучу времени и нервов. В этой статье разберём весь процесс от установки интерпретатора до создания systemd-сервисов, рассмотрим подводные камни и поделимся практическими советами из реального опыта.
🐍 Как это работает: основы запуска Python на Ubuntu
Ubuntu поставляется с предустановленным Python 3, но версия может быть не самой свежей. Система управления пакетами APT позволяет легко установить нужную версию, а менеджер пакетов pip — установить дополнительные библиотеки.
Когда вы запускаете Python-скрипт, интерпретатор:
- Читает и парсит код
- Компилирует его в байт-код
- Выполняет байт-код в виртуальной машине Python
- Взаимодействует с операционной системой через системные вызовы
🚀 Пошаговая настройка: от нуля до рабочего скрипта
Шаг 1: Проверка и установка Python
Сначала проверим, какая версия Python уже установлена:
python3 --version
python --version
which python3
Если нужна более свежая версия, добавим PPA-репозиторий:
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 python3.11-venv python3.11-dev
Шаг 2: Установка pip и виртуальных окружений
sudo apt install python3-pip python3-venv
pip3 install --upgrade pip
Шаг 3: Создание тестового скрипта
Создадим простой скрипт для тестирования:
mkdir ~/python-scripts
cd ~/python-scripts
nano hello.py
Содержимое файла:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import os
from datetime import datetime
def main():
print(f"Привет! Текущее время: {datetime.now()}")
print(f"Python версия: {sys.version}")
print(f"Рабочая директория: {os.getcwd()}")
# Проверка аргументов командной строки
if len(sys.argv) > 1:
print(f"Переданные аргументы: {sys.argv[1:]}")
if __name__ == "__main__":
main()
Шаг 4: Делаем скрипт исполняемым
chmod +x hello.py
🔧 Способы запуска Python-скриптов
Способ | Команда | Плюсы | Минусы |
---|---|---|---|
Прямой вызов | python3 script.py | Простота, контроль версии | Нужно указывать интерпретатор |
Через shebang | ./script.py | Как обычная программа | Зависит от PATH |
Через nohup | nohup python3 script.py & | Работает после выхода из SSH | Сложнее управлять |
Через systemd | systemctl start service | Автозапуск, логирование | Больше настроек |
🏗️ Практические примеры запуска
Запуск с аргументами
python3 hello.py arg1 arg2 "аргумент с пробелами"
./hello.py --config /path/to/config.json
Запуск в фоновом режиме
# Простой фоновый запуск
python3 long_running_script.py &
# С перенаправлением вывода
python3 script.py > /var/log/myscript.log 2>&1 &
# С nohup (продолжит работу после выхода из SSH)
nohup python3 script.py > /var/log/myscript.log 2>&1 &
Запуск по расписанию через cron
# Редактируем crontab
crontab -e
# Добавляем задачу (каждый день в 2:00)
0 2 * * * /usr/bin/python3 /home/user/scripts/backup.py >> /var/log/backup.log 2>&1
# Каждые 5 минут
*/5 * * * * /usr/bin/python3 /home/user/scripts/monitor.py
🔐 Создание systemd-сервиса для автозапуска
Для серьёзных production-скриптов лучше создать systemd-сервис:
sudo nano /etc/systemd/system/myapp.service
Содержимое сервиса:
[Unit]
Description=My Python Application
After=network.target
[Service]
Type=simple
User=myuser
Group=myuser
WorkingDirectory=/home/myuser/myapp
Environment=PATH=/home/myuser/myapp/venv/bin
ExecStart=/home/myuser/myapp/venv/bin/python /home/myuser/myapp/main.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Активируем сервис:
sudo systemctl daemon-reload
sudo systemctl enable myapp.service
sudo systemctl start myapp.service
sudo systemctl status myapp.service
🐍 Виртуальные окружения: изоляция зависимостей
Для каждого проекта создавайте отдельное виртуальное окружение:
# Создание виртуального окружения
python3 -m venv myproject_env
# Активация
source myproject_env/bin/activate
# Установка зависимостей
pip install requests flask psycopg2-binary
# Сохранение списка пакетов
pip freeze > requirements.txt
# Деактивация
deactivate
⚡ Альтернативные решения и инструменты
Кроме стандартного подхода, существуют и другие способы управления Python-приложениями:
- Supervisor — менеджер процессов для Unix-подобных систем
- Docker — контейнеризация Python-приложений
- Gunicorn — WSGI HTTP сервер для Python веб-приложений
- PM2 — менеджер процессов (не только для Node.js)
- Celery — для выполнения фоновых задач
Пример с Supervisor
sudo apt install supervisor
sudo nano /etc/supervisor/conf.d/myapp.conf
Конфигурация:
[program:myapp]
command=/home/user/myapp/venv/bin/python /home/user/myapp/main.py
directory=/home/user/myapp
user=user
autostart=true
autorestart=true
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
🚨 Подводные камни и решения
Проблема: “python: command not found”
Решение: Используйте python3 вместо python, или создайте алиас:
echo "alias python=python3" >> ~/.bashrc
source ~/.bashrc
Проблема: Permission denied
Решение: Проверьте права доступа и сделайте файл исполняемым:
chmod +x script.py
ls -la script.py
Проблема: ModuleNotFoundError
Решение: Убедитесь, что используете правильное виртуальное окружение или установите модуль:
pip3 install имя_модуля
# или
source venv/bin/activate
pip install имя_модуля
📊 Статистика и сравнение
По данным Stack Overflow Developer Survey 2023:
- Python — второй по популярности язык программирования (67% разработчиков)
- Ubuntu — самый популярный дистрибутив Linux для разработки (26%)
- 60% Python-разработчиков используют Linux в production
🎯 Автоматизация и интеграция
Python-скрипты на Ubuntu открывают безграничные возможности для автоматизации:
- Мониторинг сервера — скрипты для проверки нагрузки, дискового пространства, процессов
- Backup-системы — автоматическое резервное копирование с отправкой в облако
- Log-анализ — парсинг логов веб-сервера, поиск аномалий
- API-интеграции — синхронизация данных между системами
- Deployment-скрипты — автоматизация развёртывания приложений
Пример скрипта мониторинга
#!/usr/bin/env python3
import psutil
import smtplib
from email.mime.text import MIMEText
def check_system():
# Проверка загрузки CPU
cpu_percent = psutil.cpu_percent(interval=1)
# Проверка использования памяти
memory = psutil.virtual_memory()
# Проверка свободного места на диске
disk = psutil.disk_usage('/')
if cpu_percent > 80 or memory.percent > 85 or disk.percent > 90:
send_alert(f"Высокая нагрузка: CPU {cpu_percent}%, RAM {memory.percent}%, Disk {disk.percent}%")
def send_alert(message):
# Отправка уведомления
pass
if __name__ == "__main__":
check_system()
🔗 Полезные ресурсы
Дополнительная информация и документация:
- Официальная документация Python
- Документация systemd
- Документация Supervisor
- Python Package Index (PyPI)
Для серьёзных проектов рекомендуется арендовать VPS-сервер или выделенный сервер с полным root-доступом.
🏁 Заключение и рекомендации
Запуск Python-скриптов на Ubuntu — это не просто выполнение команды, а целая экосистема инструментов и подходов. Для разработки используйте виртуальные окружения, для production — systemd-сервисы или Supervisor. Всегда продумывайте логирование, обработку ошибок и мониторинг.
Рекомендации по использованию:
- Для разработки: venv + pip + простой запуск через терминал
- Для одноразовых задач: cron + логирование
- Для сервисов: systemd + виртуальное окружение
- Для веб-приложений: Gunicorn/uWSGI + Nginx + systemd
- Для микросервисов: Docker + оркестрация
Помните: правильно настроенный Python-скрипт должен работать стабильно, логировать свою активность и gracefully обрабатывать ошибки. Не забывайте про безопасность — запускайте скрипты от имени непривилегированного пользователя и валидируйте входные данные.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.