June 27, 2021

Запуск кода Python с широко закрытыми глазами

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

Превращаем скрипт в исполняемый файл

Для этого:

изменяем права доступа к нему командой chmod +x имя_сценария

в его начало добавляем строку вида #!путь_к_интерпретатору

запускаем из командной строки по пути расположения (например, ./имя_сценария).

Запустим простой скрипт на Python (prog.py):

#!/Users/al/opt/anaconda3/bin/python
import argparse

def get_args_parser():
    parser = argparse.ArgumentParser()
    parser.add_argument('--proba', '-p', type=float, 
                        help = 'probability level',
                        default=0.5)
    return parser

if __name__=='__main__':
    parser = get_args_parser()
    args = parser.parse_args()
    print(args)

Утилита make

С ее помощью можно задать блоки кода которые вызываются в качестве ее аргументов. Рассмотрим запуск из текущей папки Makefile-а со следующим содержимым:

install:
	pip install -r requirements.txt

run:
	python prog.py

Скрипт командной строки

Этот способ обладает наибольшей гибкостью... Заводим файл, наполняем его содержимым, делаем исполняемым (chmod +x имя) и запускаем из командной строки по пути расположения (например, ./имя). Если не сделать файл исполняемым, то его можно запустить посредством sh имя.

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

#!/bin/bash
if [ $# -eq 0 ]; then
echo 'You must specify arguments'
else
  NEW_ENV=1
  # init env variables to use conda
  . /Users/a19036412/opt/anaconda3/etc/profile.d/conda.sh
  conda activate base
  if [ $1 = 'install' ]; then
    if [ $NEW_ENV -eq 1  ]; then
      conda deactivate && \
      conda create --name temp_env python=3.6 -y && \
      conda activate temp_env
    else
      echo 'Using default env'
    fi
  pip install -r requirements.txt
  elif [ $1 = 'run' ]; then
    conda deactivate && \
    conda activate temp_env
    if [ $# -eq 1 ];then
      echo 'running with default proba level'
      python prog.py
    else
      python prog.py -p $2
    fi
  else
    echo 'Useless param'
  fi
fi

Тесты работы: