Home » Запуск Python-скрипта на Ubuntu — пошаговое руководство
Запуск Python-скрипта на Ubuntu — пошаговое руководство

Запуск 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()

🔗 Полезные ресурсы

Дополнительная информация и документация:

Для серьёзных проектов рекомендуется арендовать VPS-сервер или выделенный сервер с полным root-доступом.

🏁 Заключение и рекомендации

Запуск Python-скриптов на Ubuntu — это не просто выполнение команды, а целая экосистема инструментов и подходов. Для разработки используйте виртуальные окружения, для production — systemd-сервисы или Supervisor. Всегда продумывайте логирование, обработку ошибок и мониторинг.

Рекомендации по использованию:

  • Для разработки: venv + pip + простой запуск через терминал
  • Для одноразовых задач: cron + логирование
  • Для сервисов: systemd + виртуальное окружение
  • Для веб-приложений: Gunicorn/uWSGI + Nginx + systemd
  • Для микросервисов: Docker + оркестрация

Помните: правильно настроенный Python-скрипт должен работать стабильно, логировать свою активность и gracefully обрабатывать ошибки. Не забывайте про безопасность — запускайте скрипты от имени непривилегированного пользователя и валидируйте входные данные.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked