Создание инструмента для очистки системы и почему это может сделать каждый
История разработки System Cleaner — универсального инструмента для macOS и Linux, который помогает найти и удалить мусор, проверить безопасность и оптимизировать систему
---
Проблема: система засоряется, а времени разбираться нет
Несколько месяцев назад я заметил, что мой MacBook начал работать медленнее. Диск был забит, но понять, что именно занимает место, было сложно. Особенно проблемными оказались:
- ML модели от Hugging Face, PyTorch и TensorFlow — они могут занимать десятки гигабайт, и я забывал, какие из них реально используются
- Остатки удаленных приложений — после удаления программ оставались конфиги и кэши
- Артефакты разработки — `__pycache__`, `node_modules`, старые виртуальные окружения
- Конфликты зависимостей — в Python проектах они мешали работе, но обнаруживались только когда что-то ломалось
Я начал искать готовые решения, но большинство были либо платными, либо слишком сложными, либо работали только на одной платформе. Тогда я подумал: а почему бы не сделать свой инструмент?
Решение: создать свой инструмент
Идея была проста: CLI инструмент, который сканирует систему и показывает, что можно безопасно удалить. Не удаляет сам, а только анализирует и рекомендует. Это важно — безопасность превыше всего.
Что я хотел получить:
1. Кроссплатформенность — работа на macOS и Linux
2. Анализ ML кэшей — понимание, какие модели не используются
3. Проверка зависимостей — поиск конфликтов и неиспользуемых библиотек
4. Безопасность — проверка прав доступа, поиск секретов
5. Понятные отчеты — Markdown и JSON форматы
Реализация: оказалось проще, чем думал
Я разработчик на Python, но никогда не делал системных утилит. Первая мысль: "Это будет сложно". Вторая: "А попробовать?"
Технологический стек
Выбрал простой и понятный стек:
- Python 3.12 — современный язык, который я знаю хорошо
- Typer — для создания CLI интерфейса (очень простой, похож на Click, но лучше)
- Pydantic — для валидации конфигурации
- Rich — для красивого вывода в терминале
- uv — современный менеджер пакетов (быстрее pip)
Первые шаги
Начал с простого: сканирование директорий кэшей. Оказалось, что Python отлично подходит для таких задач:
```python from pathlib import Path
def scan_caches(): cache_dir = Path.home() / "Library" / "Caches" for item in cache_dir.iterdir(): size = get_directory_size(item) if size > 100 * 1024 * 1024: # Больше 100MB print(f"{item.name}: {size / 1024 / 1024:.2f} MB") ```
Это заняло буквально 10 минут. И уже работало.
Платформо-независимость
Следующий шаг — сделать инструмент работающим и на Linux. Оказалось, что это не так сложно:
- Вместо хардкода путей создал абстракцию `PlatformPaths` - Автоматическое определение платформы через `platform.system()` - Единый интерфейс для обеих ОС
```python class PlatformPaths: def cache_dir(self): if IS_MACOS: return self.home / "Library" / "Caches" elif IS_LINUX: return self.home / ".cache" ```
Теперь одна и та же логика работает на обеих платформах.
Анализ ML кэшей
Самая интересная часть — анализ моделей Hugging Face. Оказалось, что структура кэша предсказуема:
- Модели хранятся в `~/.cache/huggingface/hub/models--{org}--{model_name}/` - Можно получить дату последнего доступа через `stat()` - Модели старше 30 дней — кандидаты на удаление
Реализация заняла один вечер — это было самое интересное.
Проверка зависимостей
Для анализа зависимостей использовал существующие инструменты:
- `uv pip check` — для проверки конфликтов - Анализ импортов в коде — для поиска неиспользуемых зависимостей - Парсинг `pyproject.toml` — для получения списка зависимостей
Это тоже оказалось проще, чем казалось.
Результат: инструмент, который работает
Через день работы я получил рабочий инструмент:
- ✅ Кроссплатформенный — работает на macOS и Linux
- ✅ Анализирует ML кэши — показывает неиспользуемые модели
- ✅ Проверяет зависимости — находит конфликты и неиспользуемые пакеты
- ✅ Безопасность — проверяет права доступа и ищет секреты
- ✅ Открытый исходный код — MIT License, доступен всем
Что я узнал в процессе
1. Создание CLI инструментов проще, чем кажется — Typer делает это тривиальным
2. Кроссплатформенность достигается через абстракции — не нужно писать отдельный код для каждой ОС
3. Python отлично подходит для системных утилит — `pathlib` делает работу с путями простой
4. Открытый исходный код — это правильно — другие могут использовать и улучшать
Цифры
- Время разработки: один день
- Строк кода: ~3800 (включая тесты и документацию)
- Зависимостей: 6 основных (Typer, Pydantic, Rich, PyYAML и еще пару)
- Поддерживаемых платформ: 2 (macOS и Linux)
Почему это доступно каждому
Многие думают, что создание системных утилит — это сложно. Но это не так:
Вам не нужно:
- ❌ Знать C или C++ — Python справляется отлично
- ❌ Разбираться в системном программировании — достаточно базовых знаний
- ❌ Иметь годы опыта — достаточно понимать основы Python
- ❌ Иметь команду — можно делать в одиночку
Вам нужно:
- ✅ Базовое знание Python (достаточно понимать классы и функции)
- ✅ Понимание проблемы, которую хотите решить
- ✅ Готовность учиться (документация и примеры есть везде)
- ✅ Немного времени (можно делать постепенно)
Советы для начинающих
1. Начните с простого — не пытайтесь сразу сделать все функции
2. Используйте готовые библиотеки — не изобретайте велосипед
3. Пишите для себя — сначала решите свою проблему, потом думайте о других
4. Публикуйте код — GitHub — отличное место для этого
5. Не бойтесь ошибок — это нормально, все через это проходят
Что делать дальше
Если у вас есть идея инструмента, который решит вашу проблему:
1. Опишите проблему — что именно хотите решить
2. Найдите простой способ — не усложняйте
3. Начните с прототипа — сначала сделайте так, чтобы работало
4. Постепенно улучшайте — добавляйте функции по мере необходимости
5. Поделитесь результатом — возможно, другим это тоже нужно
Инструменты, которые помогут
- Typer — для CLI интерфейсов
- Click — альтернатива Typer (если хотите что-то другое)
- Rich — для красивого вывода
- Pydantic — для валидации данных
- uv — современный менеджер пакетов Python
Все это бесплатно и с открытым исходным кодом.
Заключение
Создание System Cleaner показало мне, что разработка полезных инструментов доступна каждому. Не нужно быть гением или иметь годы опыта. Достаточно:
- Понять проблему - Найти простое решение - Начать делать - Не останавливаться на полпути
Если у вас есть идея — реализуйте ее. Скорее всего, это проще, чем кажется. И результат может быть полезен не только вам, но и другим.
---
P.S.
Проект System Cleaner доступен на GitHub
Если хотите обсудить разработку подобных инструментов или поделиться своим опытом — пишите в Telegram
---
Теги: #Разработка #Python #Инструменты #OpenSource #Автоматизация #СистемноеПрограммирование #НачинающимРазработчикам