Мои Python-скрипты на каждый день
Какое-то время назад я стал целенаправленно расширять свои подборку Python-скриптов, решающих небольшие рутинные задачи. В этом посте хочу рассказать о самых интересных из них. Возможно, кому-то пригодятся либо сами скрипты, либо их идеи вдохновят на создание собственных утилит. Всё описанное относится к MacOS. Пост будет дополняться по мере появления новых скриптов.
В начале поста остановлюсь на использовании пакетного менеджера uv для удобного выполнения Python-скриптов, а дальше пройдусь по конкретным примерам из своей коллекции.
Как uv всё изменил
В прошлом году пакетный менеджер uv стал поддерживать PEP 723 – Inline script metadata. Это даёт возможность указать зависимости, требуемые для работы скрипта, в комментарии в начале непосредственно файла с кодом. То есть, всё необходимое для запуска хранится в одном файле, и не требуется создание дополнительных вроде requirements.txt или pyproject.toml. Также нет необходимости вручную создавать виртуальное окружение с установкой зависимостей перед запуском скрипта.
Выглядит это следующим образом:
#!/usr/bin/env -S uv run --quiet --script
# /// script
# dependencies = [
# "requests",
# ]
# ///
import requests
response = requests.get(
"https://raw.githubusercontent.com/hazadus/readwise-links/refs/heads/main/links/tags/uv.md"
)
print(response.text)
При выполнении такого скрипта, uv автоматически скачает необходимые зависимости (в приведенном примере – библиотеку requests) при первом запуске, и закэширует их. Последующие запуски будут происходить быстрее.
Все описанные ниже скрипты построены на этом принципе.
Устанавливается uv легко:
# Для macOS and Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Остальные подробности тут: https://github.com/astral-sh/uv.
Делаем скрипты запускаемым отовсюду
Чтобы ваши скрипты были доступны отовсюду в системе, нужно выполнить два шага:
- Сделать каждый скрипт исполняемым командой вида
chmod +x myscript.py - Добавить директорию со скриптами в переменную окружения
PATHв файле настроек вашего shell. Например, у меня в конце~/.bashrcесть такие строчки:# Мои утилиты и скрипты export PATH="/Users/hazadus/Projects/my-scripts/scripts:$PATH"
После изменения~/.bashrcперезапустите shell или выполнитеsource ~/.bashrc, чтобы изменения применились.
Чтобы убедиться, что всё настроено верно, вызовите свой скрипт будучи в любой директории системы командой вида myscript.py, или проверьте корректность настройки PATH командой which myscript.py.
Система
theme.py
Переключает системную тему в темный или светлый режим. Скрипт является обёрткой для удобных вызовов AppleScript, которые и выполняют основную задачу. Пользуюсь пару раз в день.
Примеры использования:
# Переключиться на тёмный режим
theme.py dark
# Переключиться на светлый режим
theme.py light
Подробнее про AppleScript:
Буфер обмена
clipmon.py
Существует множество утилит, которые сохраняют историю информации в буфере обмена операционной системы для повторного использования. Я постоянно пользуюсь для этого Maccy и Raycast, и они классные. Но объединяет их одно: количество записей в истории ограничено. Поэтому я решил создать свою утилиту, ведущую бесконечный "архив" информации в буфере обмена.
Скрипт работает в фоне, мониторит изменения в буфере обмена MacOS через библиотеку pyobjc и сохраняет все новые данные в файлах в моей домашней директории. Пользуюсь им постоянно.
При необходимости, можно найти нужное за доли секунды при помощи ripgrep:
rg python ~/clipmon
# Пример вывода:
/Users/hazadus/clipmon/text/clip_2025-10-21_09-54-18.txt
33: ```python
/Users/hazadus/clipmon/text/clip_2025-10-31_00-07-25.txt
4: -- Автоматический выбор на основе .python-version или pyproject.toml
Дополнительно:
- PyObjC – работа с Objective-C фреймворками MacOS из Python.
Мультимедиа
getsong.py
Один из моих любимых и самых ценных скриптов. Пользуюсь почти каждый день.
Мне часто кидают ссылки на миксы или лайвы на YouTube или SoundCloud, но слушать их оттуда мне некомфортно. При помощи скрипта, я скачиваю музыку по ссылке, сохраняю в удобной мне директории, конвертирую в MP3 и – при желании – сразу открываю их в системной программе "Музыка". Тут даже есть прекрасный бонус: при открытии файла, "Музыка" сразу начинает его воспроизводить и закачивает в своё "яблочное" облако. При желании я могу продолжить прослушивание файла с айфона или айпада, что суперудобно.
Использую так:
getsong.py "$(pbpaste)" --mp3 --open
Эта команда скачивает файл по ссылке из буфера обмена, конвертирует в MP3 и сразу открывает в "Музыке".
Изображения
auto_crop.py
Пример скрипта, созданного для решения частной, но очень нудной для меня задачи.
Однажды мне надо было удалить лишнее пустое пространство вокруг изображения в файлах с иконками. Причём так, чтобы иконка была правильно отцентрирована даже в том случае, если она не квадратных пропорций. Подозреваю, что знатоки графических редакторов сделают это практически мгновенно. Но я, к сожалению, совсем не дружу с графическими редакторами! Таким образом и появился этот скрипт. Поставленные задачи он выполнил, и пока больше не требовался.
Социальные сети
toot.py
Позволяет отправлять посты от своего имени в сеть Mastodon. Отдельно этот скрипт не использую, но он лёг в основу аналогичного функционала в моём проекте readwise-links.
masto_feed.py
Читает мою ленту Mastodon за указанную дату и выводит её в формате Markdown. Каждый день автоматически запускается и генерирует файл за предыдущие сутки в репо mastodon-reader.
Кстати, это пример ещё одной плодотворной темы – использование скриптов для автоматизаций, запускаемых на GitHub по расписанию. Надеюсь в будущем рассказать о ней в отдельном посте.
bsky_feed.py
По сути, аналогичен предыдущему скрипту, только читает мою ленту Bluesky за указанную дату и выводит её в формате Markdown. Каждый день автоматически запускается и генерирует файл за предыдущие сутки в репо bluesky-reader.
Разное
toggltrack.py
Получает из Toggl Track и выводит обобщенную информацию о времени, затраченном на проекты и задачи в них, за указанный период времени. Использую регулярно для анализа.
Заключение
Мне бы хотелось, чтобы этот пост вдохновил читателей на разработку персональных решений для автоматизации своих личных задач. В репозитории вы найдёте ещё больше разных скриптов, а здесь я рассказал про самые полезные для меня и часто используемые.
Если у вас уже есть своя подборка скриптов для выполнения рутинных дел, или вы нашли что-то полезное для себя в этом посте – обязательно поделитесь!
Ссылки
- Репозиторий с моими скриптами на GitHub
- Lazy self-installing Python scripts with uv
- UV tricks
- Better alternative to shell scripts with Python, uv and pytest
- PEP 723 – Inline script metadata
- Scripts I wrote that I use all the time – вдохновило меня на создание некоторых скриптов и написание этого поста
Отправить сообщение
С помощью формы ниже, вы можете связаться с автором сайта. Пожалуйста, укажите ваш ник в Телеграме или e-mail, чтобы я смог вам ответить!