Package Maximizer
Package Maximizer — это модульная система для решения задачи максимизации непротиворечивого множества пакетов с использованием различных SAT/ILP/SMT солверов.
🎯 Назначение
Система позволяет:
- Находить максимальное непротиворечивое подмножество пакетов
- Учитывать конфликты между пакетами
- Работать с разными пакетными менеджерами (APT, Pacman, DNF, Brew, Snap, Flatpak, Cargo, npm)
- Использовать различные алгоритмы решения (жадный, SAT, ILP, SMT, CP-SAT)
- Учитывать версионные ограничения и зависимости
- Экспортировать результаты в JSON, CSV и GraphML
✨ Возможности
🔧 Поддерживаемые пакетные менеджеры
- ✅ APT (Debian/Ubuntu)
- ✅ Pacman (Arch Linux)
- ✅ DNF (Fedora/RHEL/CentOS)
- ✅ Brew (macOS)
🧠 Поддерживаемые солверы
- ✅ GreedySolver — Базовый жадный алгоритм
- ✅ EnhancedGreedySolver — Улучшенный жадный алгоритм с поддержкой версий
- ✅ Z3Solver — SMT-солвер на основе Z3
- ✅ PulPSolver — ILP-солвер на основе PuLP
- ✅ ORToolsSolver — CP-SAT солвер на основе OR-Tools
- ✅ MaxSatSolver — SAT-солвер на основе MaxSAT
- ✅ MiniSatSolver — SAT-солвер на основе MiniSat
📊 Дополнительные функции
- ✅ Анализ результатов (ResultAnalyzer)
- ✅ Кэширование (CacheManager)
- ✅ Бенчмаркинг (BenchmarkRunner)
- ✅ Интеграция с реальными репозиториями (RealRepoIntegration)
- ✅ Поддержка версионных ограничений
- ✅ CLI интерфейс
📦 Установка
# Клонирование репозитория
git clone https://github.com/dominicusin/package-maximizer.git
cd package-maximizer
# Установка в режим разработки
pip install -e .
# Установка дополнительных зависимостей (для всех солверов)
pip install z3 python-sat pulp ortools
Варианты установки зависимостей
| Команда | Что устанавливает |
|---|---|
pip install -e . |
Только основные зависимости |
pip install -e ".[solvers]" |
Солверы (Z3, PuLP, OR-Tools) |
pip install -e ".[web]" |
Веб-интерфейс (Flask) |
pip install -e ".[dev]" |
Инструменты разработки |
pip install -e ".[all]" |
Все зависимости |
pip install -r requirements-core.txt |
Только ядро |
pip install -r requirements-solvers.txt |
Только солверы |
pip install -r requirements-web.txt |
Только веб |
pip install -r requirements-dev.txt |
Только dev-инструменты |
🚀 Быстрый старт
Использование через Python API
from package_maximizer import PackageMaximizer, Package
# Создание пакетов
pkg1 = Package(name="nginx", conflicts=["apache2"])
pkg2 = Package(name="apache2", conflicts=["nginx"])
pkg3 = Package(name="python3")
pkg4 = Package(name="postgresql")
# Создание максимайзера
maximizer = PackageMaximizer(
manager='apt',
solver='z3' # или 'greedy', 'pulp', 'ortools', 'maxsat', 'minisat'
)
# Максимизация
result = maximizer.maximize([pkg1, pkg2, pkg3, pkg4])
print(f"Выбранные пакеты: {[p.name for p in result]}")
# Вывод: ['python3', 'postgresql', 'nginx'] или ['python3', 'postgresql', 'apache2']
Использование через CLI
# Максимизация пакетов
package-maximizer nginx apache2 python3 postgresql -c nginx,apache2 -s z3
# Просмотр доступных солверов
package-maximizer list-solvers
# Просмотр доступных парсеров
package-maximizer list-parsers
# Проверка версии
package-maximizer version
# Бенчмаркинг
package-maximizer benchmark --solvers greedy,z3 --packages 100 --runs 5
# Работа с реальными репозиториями
package-maximizer list-installed --manager apt --limit 10
package-maximizer search nginx --manager apt
package-maximizer info nginx --manager apt
package-maximizer check-updates --manager apt
🌐 REST API (веб-интерфейс)
Запуск сервера
pip install -e ".[web]"
pm-web
Аутентификация
Все эндпоинты (кроме /api/health) требуют API-ключ в заголовке X-API-Key.
Эндпоинты
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /api/health |
Health check |
| GET | /api/v1/solvers |
Список солверов |
| GET | /api/v1/parsers |
Список парсеров |
| POST | /api/v1/maximize |
Максимизация |
| GET | /api/maximize |
Максимизация (query params) |
| POST | /api/v1/benchmark |
Бенчмаркинг |
| GET | /api/v1/cache/stats |
Статистика кэша |
| DELETE | /api/v1/cache |
Очистка кэша |
Примеры
curl -X POST http://localhost:5000/api/v1/maximize \
-H "Content-Type: application/json" \
-H "X-API-Key: dev-key-change-in-production" \
-d '{"packages": ["vim", "emacs", "nano"], "solver": "greedy", "conflicts": [["vim", "emacs"]]}'
📊 Сравнение солверов
| Солвер | Тип | Скорость | Точность | Зависимости |
|---|---|---|---|---|
| Greedy | Жадный | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | Встроен |
| EnhancedGreedy | Жадный+ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | Встроен |
| Z3 | SMT | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | pip install z3 |
| PuLP | ILP | ⭐⭐ | ⭐⭐⭐⭐⭐ | pip install pulp |
| OR-Tools | CP-SAT | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | pip install ortools |
| MaxSAT | SAT | ⭐⭐⭐ | ⭐⭐⭐⭐ | pip install python-sat |
| MiniSat | SAT | ⭐⭐⭐ | ⭐⭐⭐⭐ | pip install python-sat |
🔧 Конфигурация
Установка всех зависимостей
pip install z3 python-sat pulp ortools
Минимальная установка
pip install . # Только базовые зависимости
🧪 Тестирование
# Запуск всех тестов
python -m pytest tests/ -v
# Запуск конкретного модуля
python -m pytest tests/test_solvers.py -v
# Просмотр покрытия
python -m pytest tests/ --cov=package_maximizer --cov-report=html
📜 Лицензия
Проект распространяется под лицензией MIT. Подробности в файле LICENSE.
🤝 Вклад в проект
Приветствуются:
- Сообщения об ошибках
- Предложения по улучшению
- Pull Requests
Перед созданием PR:
- Запустите тесты:
python -m pytest tests/ - Проверьте форматирование:
black . - Проверьте линтеры:
flake8 .
📞 Контакты
| Ссылка | Описание |
|---|---|
| GitHub | dominicusin/package-maximizer |
| WWW | dominicusin.github.io/package-maximizer |
| PyPI | package-maximizer |
| ReadTheDocs | docs |
| team@package-maximizer.dev |
🎉 Благодарности
Package Maximizer — Ваш помощник в управлении пакетами! 🚀
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file package_maximizer-0.5.0.tar.gz.
File metadata
- Download URL: package_maximizer-0.5.0.tar.gz
- Upload date:
- Size: 100.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be6036c4a4eff8b80e913dd1f416655107854875067fc0f952d5794570987fac
|
|
| MD5 |
6e30e460315b8fad81702fcc79152af0
|
|
| BLAKE2b-256 |
7c54e6513bb4c9577a6c8143aade369f43ce1bbcf24034f74bb7515a7ca638da
|
File details
Details for the file package_maximizer-0.5.0-py3-none-any.whl.
File metadata
- Download URL: package_maximizer-0.5.0-py3-none-any.whl
- Upload date:
- Size: 80.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5d44977aadcc75f162b63574ec0095fd2ca626f68939c7fa081d9f78220e14b
|
|
| MD5 |
ba2cb6892238cef57c30006547a24af0
|
|
| BLAKE2b-256 |
b6ca543a74a43eb5480934d6b838c3e5e02f9af7f7307d113c535d687b532596
|