Package Maximizer — это модульная система для решения задачи максимизации непротиворечивого множества пакетов с использованием различных SAT/ILP/SMT солверов.
Система позволяет:
- Находить максимальное непротиворечивое подмножество пакетов
- Учитывать конфликты между пакетами
- Работать с разными пакетными менеджерами (APT, Pacman, DNF, Brew, Snap, Flatpak, Cargo, npm, pip, gem и др.)
- Использовать различные алгоритмы решения (жадный, SAT, ILP, SMT, CP-SAT)
- Учитывать версионные ограничения и зависимости
- Экспортировать результаты в JSON, CSV и GraphML
- Парсить вывод 22+ систем управления пакетами
Linux:
- ✅ APT (Debian/Ubuntu) —
apt list --installed - ✅ Pacman (Arch Linux) —
pacman -Q - ✅ DNF (Fedora/RHEL 8+) —
dnf list installed - ✅ Yum (RHEL/CentOS 7) —
yum list installed - ✅ Zypper (openSUSE/SUSE) —
zypper search - ✅ Apk (Alpine Linux) —
apk list
macOS:
- ✅ Brew (Homebrew) —
brew list
Windows:
- ✅ Winget (Windows 10+) —
winget list - ✅ Scoop —
scoop list - ✅ Chocolatey —
choco list
Кроссплатформенные (языковые):
- ✅ Cargo (Rust) —
cargo metadata/Cargo.lock - ✅ Npm (Node.js) —
npm ls --json - ✅ Yarn (Node.js) —
yarn list --depth=0 - ✅ Pip (Python) —
pip list/pip freeze - ✅ Gem (Ruby) —
gem list - ✅ Composer (PHP) —
composer show --installed
C++:
- ✅ Vcpkg —
vcpkg list - ✅ Conan —
conan search - ✅ NuGet (.NET) —
dotnet list package
Контейнеры / универсальные:
- ✅ Snap —
snap list - ✅ Flatpak —
flatpak list - ✅ Conda (Python) —
conda list - ✅ Portage (Gentoo) —
emerge -p
- ✅ 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-инструменты |
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']# Максимизация пакетов
package-maximizer nginx apache2 python3 postgresql -c nginx,apache2 -s z3
# Просмотр доступных солверов
package-maximizer list-solvers
# Просмотр доступных парсеров
package-maximizer list-parsers
# Просмотр поддерживаемых пакетных менеджеров (22)
package-maximizer list-managers
# Проверка версии
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 aptpip 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 ortoolspip 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 — Ваш помощник в управлении пакетами! 🚀