Эффективные методы выполнения Python-скриптов в разных средах

Раздел: Инструменты -> Запуск скриптов

Основной способ: вызов скрипта через интерпретатор

Наиболее прямой и универсальный метод запуска приложения Python - передача имени файла интерпретатору python или python3.

Команда в терминале:

python app.py

Python run app py (запуск приложения python)

Если в системе установлено несколько версий, используют явное указание:

python3 app.py

Python через командную строку (запуск python из командной строки в linux)

Объяснение: интерпретатор читает файл, выполняет код последовательно. При этом автоматически устанавливается специальная переменная __name__ равная "__main__", что позволяет организовать точку входа через конструкцию if __name__ == "__main__".

Типичные ошибки:

  • python: command not found - интерпретатор не установлен или не добавлен в PATH. Решение: установите Python с официального сайта или через пакетный менеджер.
  • ModuleNotFoundError - отсутствует зависимость. Решение: установите нужный пакет через pip install.
  • SyntaxError - ошибка в коде. Решение: проверьте синтаксис, особенно отступы и соответствие версии Python.

Цель использования: запуск однократного скрипта, тестирование, выполнение утилит.

Как сделать скрипт исполняемым в Linux/macOS без вызова python вручную?

Добавить shebang в начало файла и установить права на выполнение.

#!/usr/bin/env python3
# ваш код

Затем:

chmod +x app.py
./app.py

Возможные проблемы: неверный путь к интерпретатору в shebang. Используйте /usr/bin/env python3 для переносимости.

Случаи использования: распространение скриптов как самостоятельных команд.

Как запустить скрипт с аргументами командной строки?

Используйте модуль sys.argv или библиотеку argparse.

import sys
print(f"Получено аргументов: {len(sys.argv)}")
for i, arg in enumerate(sys.argv):
    print(f"Аргумент {i}: {arg}")

Запуск:

python app.py --name John --age 30

Ошибка: IndexError при обращении к несуществующему аргументу. Решение: проверять длину sys.argv или использовать парсер.

Цель: передача входных данных (файлы, конфигурации, режимы).

Как запустить скрипт из виртуального окружения?

Активируйте окружение, затем вызывайте python:

source venv/bin/activate   # Linux/macOS
python app.py
# или без активации:
venv/bin/python app.py

На Windows:

venv\Scripts\activate
python app.py

Частая проблема: используется глобальный python вместо окружения. Решение: вызывать python по абсолютному пути из папки виртуального окружения.

Случаи: изоляция зависимостей, разработка проектов.

Как запустить модуль как скрипт с помощью python -m?

Если скрипт является частью пакета, используйте флаг -m:

python -m mypackage.mymodule

Это эквивалентно python mypackage/mymodule.py, но работает корректно с относительными импортами.

Ошибка: No module named ... Решение: проверьте, что файл находится в пути PYTHONPATH или текущая директория содержит пакет.

Цель: запуск встроенных модулей (-m http.server) или собственных пакетов.

Как запустить скрипт с конкретной версией Python (pyenv)?

Используйте pyenv для выбора версии:

pyenv shell 3.11.5
python app.py

Или локально в каталоге:

pyenv local 3.10.12
python app.py

Проблема: pyenv не установлен или не настроен PATH. Установите pyenv и добавьте eval в shell.

Применение: тестирование совместимости, работа с несколькими проектами.

Как запустить скрипт в Docker контейнере?

Создайте Dockerfile:

FROM python:3.12-slim
WORKDIR /app
COPY app.py .
CMD ["python", "app.py"]

Сборка и запуск:

docker build -t myapp .
docker run myapp

Ошибки: не найден файл, если не скопирован; проблемы с зависимостями. Решение: COPY requirements.txt и RUN pip install.

Цель: изолированное выполнение в воспроизводимом окружении.

Как запустить скрипт по расписанию (cron / Task Scheduler)?

Добавьте задание в crontab:

0 6 * * * /usr/bin/python /home/user/app.py >> /var/log/app.log 2>&1

На Windows используйте Планировщик задач с путём к python и аргументами.

Типичная проблема: скрипт не находит модули, так как PATH не установлен. Решение: указывать полный путь к python и скрипту, а также активировать окружение внутри скрипта.

Случаи: автоматические бэкапы, обновления, мониторинг.

Как запустить скрипт с отладчиком (pdb)?

Вставьте в код:

import pdb; pdb.set_trace()

Или запустите с флагом -m pdb:

python -m pdb app.py

Проблема: отладчик останавливается не там, где ожидалось. Решение: проверьте точку остановки и учтите, что -m pdb останавливается на первой строке.

Назначение: поиск логических ошибок.

Как запустить скрипт в фоне (nohup / screen / systemd)?

Используйте nohup:

nohup python app.py &

Для длительных процессов лучше screen или tmux:

screen -S mysession
python app.py
# Ctrl+A, D для отключения

Частая ошибка: потеря вывода в консоли. Перенаправьте вывод в файл: nohup python app.py > output.log 2>&1 &

Когда нужно: серверные приложения, боты, долгие вычисления.

Как запустить скрипт с профилированием (cProfile)?

Команда:

python -m cProfile app.py

Результат покажет время выполнения каждой функции.

Проблема: слишком много вывода. Используйте сортировку: -s time.

Цель: оптимизация производительности.

Как запустить один и тот же скрипт несколько раз с разными аргументами из командной строки?

С помощью цикла в оболочке (bash):

for i in {1..3}; do
  python app.py --iteration $i
done

Или с использованием xargs:

seq 1 3 | xargs -I {} python app.py --num {}

Ошибка: неправильная подстановка аргументов из-за пробелов. Решение: использовать кавычки.

Сценарий: тестирование с различными входными данными.

Расширенные примеры запуска с подробным выводом

Пример 1: запуск с argparse и разбор аргументов

Пример
# sum_args.py
import argparse
parser = argparse.ArgumentParser(description='Сложение чисел.')
parser.add_argument('--numbers', nargs='+', type=int, help='Список чисел')
args = parser.parse_args()
result = sum(args.numbers)
print(f'Сумма чисел {args.numbers} равна {result}')

Команда и результат:

Пример
python sum_args.py --numbers 10 20 30
Сумма чисел [10, 20, 30] равна 60

Пример 2: запуск модуля http.server для раздачи статики

Пример
python -m http.server 8080

Результат (в терминале):

Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...

При открытии браузера по адресу http://localhost:8080 отображается содержимое текущей папки.

Пример 3: запуск с перенаправлением stdout и stderr в разные файлы

Пример
# output.py
import sys
print('Обычный вывод')
print('Ошибка в stderr', file=sys.stderr)

Команда:

Пример
python output.py 1>stdout.log 2>stderr.log

Проверка содержимого файлов:

# stdout.log
Обычный вывод
# stderr.log
Ошибка в stderr

Пример 4: запуск скрипта с использованием переменной окружения

Пример
# env_demo.py
import os
mode = os.environ.get('MODE', 'production')
print(f'Запуск в режиме: {mode}')

Команда:

Пример
MODE=debug python env_demo.py
Запуск в режиме: debug

Без установки переменной:

Пример
python env_demo.py
Запуск в режиме: production

Пример 5: запуск скрипта с отладчиком (однострочная точка останова)

Пример
# debug_me.py
def calc(x, y):
    import pdb; pdb.set_trace()
    return x / y
print(calc(10, 0))

Запуск:

Пример
python debug_me.py

Интерактивная сессия pdb (пользователь вводит команды):

> /home/user/debug_me.py(4)calc()
-> return x / y
(Pdb) x
10
(Pdb) y
0
(Pdb) c
ZeroDivisionError: division by zero

Пример 6: запуск скрипта с профилированием и сортировкой по времени

Пример
# slow_script.py
import time
def heavy():
    total = 0
    for i in range(1000000):
        total += i
    return total
print(heavy())

Команда:

Пример
python -m cProfile -s time slow_script.py

Фрагмент вывода:

         3 function calls in 0.095 seconds
   Ordered by: internal time
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.095    0.095    0.095    0.095 slow_script.py:4(heavy)
        1    0.000    0.000    0.095    0.095 {built-in method builtins.print}
        1    0.000    0.000    0.095    0.095 slow_script.py:1(<module>)

Пример 7: запуск скрипта с изменением рабочей директории через -c

Однострочный код:

Пример
python -c "import os; print(os.getcwd())"
/home/user

Для многострочного кода можно использовать heredoc:

Пример
python <
Hello from heredoc
Python version: 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0]

Пример 8: запуск скрипта с обработкой сигналов (graceful shutdown)

Пример
# graceful.py
import signal, sys, time
def handler(signum, frame):
    print('\nПолучен сигнал', signum, 'остановка...')
    sys.exit(0)
signal.signal(signal.SIGINT, handler)
print('Запущен. Нажмите Ctrl+C для остановки.')
while True:
    time.sleep(1)

Запуск:

Пример
python graceful.py

При нажатии Ctrl+C вывод:

Запущен. Нажмите Ctrl+C для остановки.
^C
Получен сигнал 2 остановка...

Запуск приложения Python - comments

En
Python run app py (python)