Установка скрипта через setuptools#
См.также
Скрипты с интерфейсом командной строки можно запускать с указанием shebang и сделав скрипт исполняемым или использовать setuptools.
Setuptools - это набор утилит для работы с пакетами Python. В нем есть масса возможностей, тут рассматривается лишь базовые пример. Подробнее в документации
Преимущества использования setuptools:
запуск будет работать на Linux/Windows одинаково
setuptools умеет работать с Python package
Пример базового использования setuptools#
Пример использования setuptools для скрипта example_05_pomodoro_timer.py.
Скрипт example_05_pomodoro_timer.py (вывод сокращен):
from datetime import datetime, date, timedelta
import time
import sys
import click
# ...
@click.command()
@click.option("--pomodoros_to_run", "-r", default=5, show_default=True, type=int)
@click.option("--work_minutes", "-w", default=25, show_default=True, type=int)
@click.option("--short_break", "-s", default=5, show_default=True, type=int)
@click.option("--long_break", "-l", default=30, show_default=True, type=int)
@click.option("--set_size", "-p", default=4, show_default=True, type=int)
def cli(pomodoros_to_run, work_minutes, short_break, long_break, set_size):
session_stats = {"total": pomodoros_to_run, "done": 0, "todo": pomodoros_to_run}
global stats
stats = update_session_stats(session_stats)
click.clear()
all_pomodoros = list(range(1, pomodoros_to_run + 1))
pomodoro_sets = sets_of_pomodoros(all_pomodoros, set_size)
for pomo_set in pomodoro_sets:
run_pomodoro_set(pomo_set, work_minutes, short_break, long_break)
if __name__ == "__main__":
cli()
Файл setup.py
from setuptools import setup
setup(
name='pomodoro',
version='1.0',
py_modules=['example_05_pomodoro_timer'],
install_requires=[
'Click',
],
entry_points='''
[console_scripts]
pomodoro=example_05_pomodoro_timer:cli
''',
)
Это очень базовый пример файла setup.py, но для своих скриптов его может быть вполне достаточно. Параметры setup:
name='pomodoro'
- это имя приложения/скриптаversion='1.0'
- версия скриптаpy_modules=['example_05_pomodoro_timer']
- основной скрипт, который надо запускатьinstall_requires=['Click']
- зависимости скрипта
И последний параметр entry_points
:
entry_points='''
[console_scripts]
pomodoro=example_05_pomodoro_timer:cli
'''
первое слово pomodoro - это команда, которая вызывает скрипт,
example_05_pomodoro_timer - какой скрипт запустить (то же самое, что в py_modules)
cli - в нашем случае это имя функции к которой привязана настройка click
Установка скрипта после создания setup.py (тут есть много вариантов, в часности запуск установки в development режиме -e):
$ pip install .
Processing /home/vagrant/repos/advanced-pyneng-2/advpyneng-online-2-sep-nov-2020/examples/03_click
Requirement already satisfied: Click in /home/vagrant/venv/pyneng-py3-8-0/lib/python3.8/site-packages (from pomodoro==1.0) (7.1.2)
Building wheels for collected packages: pomodoro
Building wheel for pomodoro (setup.py) ... done
Created wheel for pomodoro: filename=pomodoro-1.0-py3-none-any.whl size=2416 sha256=15a4751c3e03ab7da4f5e2ee979f54fadcc4a1724ce8f6994ee5966c3c8af193
Stored in directory: /tmp/pip-ephem-wheel-cache-n_s8xn0d/wheels/b3/ff/4f/e229093f911f6ad2ba16bbb55fbc28dd4cf701f7fe60d9333a
Successfully built pomodoro
Installing collected packages: pomodoro
Successfully installed pomodoro-1.0
После этого скрипт можно вызывать по pomodoro в любом месте:
[~/repos/advanced-pyneng-2/advpyneng-online-2-sep-nov-2020]
$ pomodoro
It's time to work!
Pomodoro 1
Work: 0:00:01^C
Aborted!
Удалить скрипт:
$ pip uninstall pomodoro
Found existing installation: pomodoro 1.0
Uninstalling pomodoro-1.0:
Would remove:
/home/vagrant/venv/pyneng-py3-8-0/bin/pomodoro
/home/vagrant/venv/pyneng-py3-8-0/lib/python3.8/site-packages/example_05_pomodoro_timer.py
/home/vagrant/venv/pyneng-py3-8-0/lib/python3.8/site-packages/pomodoro-1.0.dist-info/*
Proceed (y/n)? y
Successfully uninstalled pomodoro-1.0