Как запустить файл python на сервере

Обновлено: 04.07.2024

Код, написанный на языке Python, может храниться в редакторе кода, IDE или файле. И он не будет работать, если не знать, как его правильно запускать.

В этом материале рассмотрим 7 способов запуска кода, написанного на Python. Они будут работать вне зависимости от операционной системы, среды Python или местоположения кода.

Где запускать Python-скрипты и как?

Python-код можно запустить одним из следующих способов:

  1. С помощью командной строки операционной системы (shell или терминал);
  2. С помощью конкретной версии Python или Anaconda;
  3. Использовать Crontab;
  4. Запустить код с помощью другого Python-скрипта;
  5. С помощью файлового менеджера;
  6. Использовать интерактивный режим Python;
  7. Использовать IDE или редактор кода.

Запуск Python-кода интерактивно

Для запуска интерактивной сессии нужно просто открыть терминал или командную строку и ввести python (или python3 в зависимости от версии). После нажатия Enter запустится интерактивный режим.

Вот как запустить интерактивный режим в разных ОС.

Интерактивный режим в Linux

Откройте терминал. Он должен выглядеть приблизительно вот так :

терминал Linux запуск python

После нажатия Enter будет запущен интерактивный режим Python.

Интерактивный режим в macOS

На устройствах с macOS все работает похожим образом. Изображение ниже демонстрирует интерактивный режим в этой ОС.

терминал MacOs запуск python

Интерактивный режим в Windows

В Windows нужно открыть командную строку и ввести python . После нажатия Enter появится приблизительно следующее:

терминал Windows запуск python

Запуск Python-скриптов в интерактивном режиме

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

Запуск Python-скриптов в интерактивном режиме

Этот код должен выводить целые числа от 0 до 5. В данном случае вывод — все, что появилось после print(i) .

Для выхода из интерактивного режима нужно написать следующее:

И нажать Enter. Вы вернетесь в терминал, из которого и начинали.

Есть и другие способы остановки работы с интерактивным режимом Python. В Linux нужно нажать Ctrl + D, а в Windows — Ctrl + Z + Enter.

Стоит отметить, что при использовании этого режима Python-скрипты не сохраняются в локальный файл.

Как выполняются Python-скрипты?

Отличный способ представить, что происходит при выполнении Python-скрипта, — использовать диаграмму ниже. Этот блок представляет собой скрипт (или функцию) Python, а каждый внутренний блок — строка кода.

При запуске скрипта интерпретатор Python проходит сверху вниз, выполняя каждую из них. Именно таким образом происходит выполнение кода.

Но и это еще не все.

Блок-схема выполнения кода интерпретатором

  • Шаг 1: скрипт или .py-файл компилируется, и из него генерируются бинарные данные. Готовый файл имеет расширение .pyc или .pyo.
  • Шаг 2: генерируется бинарный файл. Он читается интерпретатором для выполнения инструкций.

Это набор инструкций, которые приводят к финальному результату.

Иногда полезно изучать байткод. Если вы планируете стать опытным Python-программистом, то важно уметь понимать его для написания качественного кода.

Это также пригодится для принятия решений в процессе. Можно обратить внимание на отдельные факторы и понять, почему определенные функции/структуры данных работают быстрее остальных.

Как запускать Python-скрипты?

Для запуска Python-скрипта с помощью командной строки сначала нужно сохранить код в локальный файл.

Возьмем в качестве примера файл, который был сохранен как python_script.py. Сохранить его можно вот так:

Сохранить скрипт в текстовом редакторе достаточно легко. Процесс ничем не отличается от сохранения простого текстового файла.

Но если использовать командную строку, то здесь нужны дополнительные шаги. Во-первых, в самом терминале нужно перейти в директорию, где должен быть сохранен файл. Оказавшись в нужной папке, следует выполнить следующую команду (на linux):

После нажатия Enter откроется интерфейс командной строки, который выглядит приблизительно следующим образом:

интерфейс командной строки

Теперь можно писать код и с легкостью сохранять его прямо в командной строке.

Вокруг нас очень мало людей, которые когда-нибудь в своей жизни построят автомобиль. И вряд ли кто-то из них создаст авиационную систему. Возведёт здание. Заложит город.

Эти конструкции слишком сложны, чтобы их сумели создать обычные люди вроде нас с вами. Однако компьютер, может быть, в десять раз сложнее, но готов плясать под вашу дудочку. Простой код можно выучить за пару часов. Начните с языка программирования, который называется «Python». Его написали специально для неквалифицированных пользователей, чтобы перед ними шире раскрылись возможности их компьютеров. Напишите свой код, даже если он понадобится вам только на один день, на один час работы. Если хотите, чтобы компьютер не напрягал вас, а, наоборот, помогал вам, облегчал ваш труд, научитесь писать код.

И знаете, он совершенно прав. Я хочу в картинках рассказать как это легко — поставить Python на Windows и подружить его с портативным локальным WAMP сервером типа Open Server или даже Denwer. А потом забить на них болт и поставить себе Django.

1. Как запустить Python на Windows

Качаем Python


Заходим на сайте Python на страницу с загрузками для Windows. Там есть две ссылки — последний релиз Python второй ветки (сейчас это 2.7.10) и третьей ветки (соответственно — 3.4.3). Так как мы только начинаем с питоном, и нам не нужно поддерживать антикварные проекты, то нам нужна третья.

Переходим по ссылке, прокручиваем вниз экрана и там будет опять две ссылки — Windows x86 MSI installer для 32-битных Windows и Windows x86-64 MSI installer для 64-битных. Если вдруг вы не знаете, какая у вас Windows, то просто кликаете «Пуск», потом правой кнопкой по «Компьютеру», левой кнопкой по «Свойствам» и смотрите.


Устанавливаем Python


Качаем релиз и запускаем его. Сначала загрузчик спросит нас куда ставить. Ставить лучше в корень основного диска (C:\Python34\, например). Потом загрузчик предложит выбрать разные опции. Убедитесь, что pip включен (с его помощью легко качать разные полезные пакеты для питона). Также включите «Add python.exe to Path», иначе потом придётся делать это вручную.


Немного о Path


Path (или %PATH%) — это виндовская переменная среды, в которой хранятся пути поиска исполняемых файлов. Суть в том, что если файл лежит по одному из путей, сохранённых в Path, его можно вызвать в консоли по одному названию. Если нет, то придётся всякий раз прописывать полный путь до файла.

В нашем случае, если не прописать путь до питона, то его надо будет каждый раз вызывать как C:\Python34\python.exe , что несколько мучительно. А если прописать, то можно будет ограничиться лаконичным python . Плюс, при установке питон вписывает в Path строку C:\Python34\Scripts, что даёт возможность вызывать разные полезные скрипты так же одним словом.

Ручная вписка питона в Path


Так что если вы вдруг по воле случая не нажали на «Add python.exe to Path», добавить путь в Path можно вручную. Опять-таки кликаете «Пуск», потом правой кнопкой по «Компьютеру», левой кнопкой по «Свойствам», попадаете на знакомую уже вам вкладку «Система», там в левом меню выбираете «Дополнительные параметры системы», в открывшемся окошке во вкладке «Дополнительно» жмёте на «Переменные среды», ищете в «Системных переменных» переменную Path, выделяете её, жмёте на «Изменить» и добавляете C:\Python34\;C:\Python34\Scripts;. Только если у вас питон стоит по другому адресу, то вместо C:\Python34\, укажите ваш путь.


Запуск Python


Что бы наконец запустить питон, стартуем cmd.exe (Win+R, cmd или «Пуск» -> «Выполнить» cmd), в нём пишем python , жмём enter и — готово — питон запустился!

Можно работать с питоном в интерактивном режиме в командной строке, например, использовать его как калькулятор (лол), или для быстрой проверки каких-то выражений, для обучения и пр.


Если мы хотим запустить файл, переходим в командной строке в папку с файлом (например, cd C:\temp ) и запускаем файл python hello.py . Готово! Либо можно воспользоваться преимуществами добавления пути в Path, положить файл в C:\Python34\Scripts и вызвать его просто по названию из любого места.


Если вам не нравится дизайн cmd.exe, вместе с питоном идёт своя оболочка, она доступна через «Пуск» -> «Все программы» -> «Python» -> «IDLE (Python 3.4 GUI - 32 bit)»

2. Как запустить Python на локальном WAMP-сервере

Установка на Windows и пользование питоном в качестве скриптового языка не представляет никаких трудностей. Но как вы заметили для запуска этих скриптов требуется консоль. А как запустить их через браузер, как разместить их на локальном сервере?

Вот тут-то и начинаются трудности.

Прописываем питон в конфигах апача

Будем исходить из того, что у вас уже стоит Open Server или Denwer, или ещё какой-то локальный сервер и на этом сервере крутится Apache. Первая наша задача — дать апачу знать, что он может обрабатывать питоновские скрипты.


Указываем в скрипте путь до Python

Так же, из-за того, что питоновский скрипт обрабатывается по CGI, нам необходимо прописывать Content-Type.


Затем кладём файл на какой-нибудь локальный сайт (в Denwer нужно класть обязательно в папку cgi) и вызываем его через браузер:


А дальше можно спарсить строку запросов, и получить нормальный такой web-скрипт.



3. Django

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

Самый простой способ установки — воспользоваться питоньим менеджером пакетов pip, который мы установили вместе с питоном (подробнее о синтаксисе пипа можно почитать здесь).

Python - очень популярный язык программирования для написания различных системных скриптов в Linux. В Windows, там где не хватает возможностей командной оболочки используется PowerShell. В Linux же, когда возможностей Bash не хватает используется язык Python.

На этом языке написано огромное количество системных программ, среди них пакетный менеджер apt, видеоредактор OpenShot, а также множество скриптов, которые вы можете установить с помощью утилиты pip. В этой небольшой статье мы рассмотрим как запустить Python скрипт в Linux с помощью терминала различными способами.

Запуск python скрипта в Linux

Для примера нам понадобится Python скрипт. Чтобы не брать какой-либо из существующих скриптов, давайте напишем свой:

print("Hello from losst!")


Для того чтобы запустить скрипт необходимо передать его интерпретатору Python. Для этого просто откройте терминал с помощью сочетания клавиш Ctrl + Alt + T, перейдите в папку со скриптом и выполните:


Если вы хотите, чтобы после выполнения скрипта открылась консоль, в которой можно интерактивно выполнять команды языка Python используйте опцию -i:

python -i script.py


Но как вы могли заметить, при запуске apt или openshot не надо писать слово python. Это намного удобнее. Давайте разберемся как это реализовать. Если вы не хотите указывать интерпретатор в командной строке, его надо указать в самом скрипте. Для этого следует в начало скрипта добавить такую строчку:


Сохраните изменения, а затем сделайте файл скрипта исполняемым с помощью такой команды:

chmod ugo+x script.py

После этого можно запустить скрипт Python просто обращаясь к его файлу:


Если убрать расширение .py и переместить скрипт в каталог, находящийся в переменной PATH, например /usr/bin/, то его можно будет выполнять вот так:

Как видите, запуск команды python Linux выполняется довольно просто и для этого даже есть несколько способов. А каким способом пользуетесь вы? Напишите в комментариях!

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.


В этой статье я хочу поделиться несколькими удобными способами организации вашего проекта на рабочем (даже продакшен) сервере.

Я работаю, в основном, с Python/Django стеком, поэтому все примеры будут, в первую очередь, применительно к этому набору. Также ключевые технологии: Ubuntu (17.10), Python3 (3.6).

  • Логи (logrotate)
  • Демоны (systemd)
  • локальные настройки

Предполагается что вы делаете все грамотно, приложение хранится в репозитории, деплоится в отдельную папку на сервере, используется, например, virtualenv. Для запуска используется отдельно созданный юзер, который имеет достаточно прав, но не слишком много (например не имеет sudo и не разрешен логин по ssh).

Для начала я повторю прописные истины, что все что хранится в репозитории — это только чистый код и статичные данные. Все настройки содержат только дефолты, никаких паролей и ключей, даже в неиспользуемых файлах.

Даже на рабочем компьютере (ноутбуке) где вы пишете код у вас в папке проекта не должно быть ничего что бы вы не могли закачать на продакшен. Имеется в виду порочная практика использования файлика "local_settings.py" в папке settings внутри проекта (как вариант — development_settings.py). Я разберу этот пример ниже.

Наверняка вы используете логирование. Встроенный модуль logging очень хорош, но не всегда стоит изощряться и использовать его для всего на свете.

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

Используйте сервис logrotate. Ниже приводится простой конфиг для логов celery.

Стандартными средствами пишем файлик /var/log/myproject/celery.log, ежедневно он кладется в папку /var/log/myproject/archive/ и к имени добавляется суффикс предыдущего дня.

Если у вас лог пишется очень быстро и вы хотите его ротировать каждый час, то в конфиге перекомментируйте строчки "daily" и "hourly". Также нужно настроить logrotate чтобы он запускался каждый час (по умолчанию обычно ежедневно). Выполните в bash:

Конфиг (файлик myservice) надо положить в папку logrotate

  • конфиг надо именно скопировать, симлинки работать не будут
  • в принципе, конфиг почти взят из доки по logrotate, но очень важно поставить copytruncate директиву
  • (добавлено из комментария rusnasonov ) logrotate туповат и использует простейшую систему ротирования, без буферов. Ротирование проходит в два шага — сначала копируется старый файл, а потом он обрезается на старом месте. Это может привести к потере логов, которые были записаны в промежутке (отражено в документации)

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

Сервисы

Как вы запускаете ваше приложение? Есть куча разных способов. По моим наблюдения основные такие:

  • запускаем screen/tmux и внутри запускаем в интерактивном режиме скрипт
  • режим демона типа "-D" для gunicorn или celery
  • supervisord
  • init.d скрипт
  • Docker

Все они имеют свои плюсы, но, на мой взгляд, они имеют еще больше минусов.

Я не буду здесь рассматривать Docker. Во-первых, у меня не так много опыта работы с ним. А во-вторых, если вы используете контейнеры, то вам и остальные советы из этой статьи не очень нужны. Там подход уже другой.

Я считаю, что если система предоставляет нам удобный инструмент, то почему бы им не воспользоваться.

В Ubuntu начиная с версии 15.04 по-умолчанию поставляется systemd для управления сервисами (и не только).

systemd очень удобен тем, что самостоятельно делает все правильно:

  • запускает приложение под нужным пользователем и устанавливает переменные окружения, если нужно
  • при внезапной остановке приложения — перезапускает его заданное количество раз
  • очень гибок и позволяет настроить зависимости и порядок запуска

Конечно, если у вас нет systemd, то можно смотреть в сторону supervisord, но у меня довольно большая нелюбовь к этому инструменту и я избегаю его использовать.
Я надеюсь не будет людей, кто будет сомневаться что при наличии systemd использовать supervisord вредно.

Ниже я приведу пример конфига для запуска.

Запуск gunicorn (проксируется через локальный nginx, но это здесь неважно).

Здесь важно не использовать режим демонизации. Мы запускаем gunicorn обычным процессом, а демонизирует его сам systemd, он же и следит за перезапуском при падениях.

Обратите внимание, что мы используем путь к python и gunicorn относительно virtualenv-папки.

Для celery все будет таким же, но строку запуска я рекомендую такой (пути и значения поставьте свои):

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

Вкратце это означает следующее: если сервис упал, то запусти его снова через 2 секунды, но не больше 5 раз за 11 секунд. Важно понимать, что если значение в StartLimitIntervalSec будет, например, 9 секунд, то в случае если сервис остановится 5 раз подряд (сразу после запуска), то после пятого падения systemd сдастся и не будет его больше поднимать (2 * 5). Значение 11 выбрано именно с тем, чтобы исключить такой вариает. Если, например, у вас был сетевой сбой на 15 секунд и приложение падает сразу после старта (без таймаута), то пусть уж лучше оно долбит до победного, чем просто останавливается.

Чтобы установить этот конфиг в систему, можно просто сделать симлинк из рабочей папки:

Однако, с симлинками надо быть осторожными — если у вас проект лежит не на системном диске, то есть вероятность что он может монтироваться после старта сервисов (например, сетевой диск или memory-mapped). В этом случае он просто не запустится. Здесь вам придется гуглить как правильно настроить зависимости, да и вообще конфиг тогда лучше скопировать в папку systemd.
Update: после замечания andreymal я думаю что будет правильнее копировать конфиги в папку и ставить им правильные права:

Еще советую отключить вывод в консоль, иначе все будет попадать в syslog.

Когда у вас все компоненты заведены в systemd, то использование каждого из них сводится к:

Когда компонентов больше одного, то имеет смысл написать скрипт для массового управления всем хозяйством на сервере.

Для удаленной отладки через консоль (запустит shell_plus из django-extensions):

Если у вас больше одного сервера, то, конечно, вы используете уже свои скрипты для разворачивания, это просто пример.

Локальные настройки

Это тема для холивара и я хочу заметить, что этот параграф — исключительно моя точка зрения, которая базируется на моем опыте. Делайте как хотите, я просто советую.

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

Какие есть самые частые способы хранения таких настроек и какие проблемы с ними:

  • файлик local_settings.py, который хранится в папке проекта рядом с дефолтными setting.py
    Проблема: можно случайно закоммитить файл, можно его затереть при копировании/обновлении папки (rsync или из архива)
  • переменные окружения. Тоже не очень безопасно, не очень удобно (при soft-reload например)
  • отдельный файл вне папки проекта

Я рекомендую именно этот способ. Обычно я для проекта создаю yaml-файл в папке "/usr/local/etc/". У меня написан небольшой модуль, который используя магию хаки загружает переменные из файлика в locals() или globals() импортирующего модуля.

Используется очень просто. Где-то в глубинах settings.py для Django (лучше ближе к концу) достаточно вызвать:

И все содержимое будет замешано в глобальные settings. У меня используется merge для списков и словарей, это может быть не всем удобно. Важно помнить, что Django импортирует только UPPERCASE константы, то есть в файлике настройки первого уровня у вас сразу должны быть в верхнем регистре.

Читайте также: