A previous release had provenance metadata, but this release does not. View details.
Package Maximizer
Package Maximizer — это модульная система для решения задачи максимизации непротиворечивого множества пакетов с использованием различных SAT/ILP/SMT солверов.
🎯 Назначение
Система позволяет:
- Находить максимальное непротиворечивое подмножество пакетов
- Учитывать конфликты между пакетами
- Работать с разными пакетными менеджерами (APT, Pacman, DNF, Brew, Snap, Flatpak, Cargo, npm, pip, gem и др.)
- Использовать различные алгоритмы решения (жадный, SAT, ILP, SMT, CP-SAT)
- Учитывать версионные ограничения и зависимости
- Экспортировать результаты в JSON, CSV и GraphML
- Парсить вывод 22+ систем управления пакетами
✨ Возможности
🔧 Поддерживаемые пакетные менеджеры (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-инструменты |
🚀 Быстрый старт
Использование через 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
# Просмотр поддерживаемых пакетных менеджеров (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 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 — Ваш помощник в управлении пакетами! 🚀
Metadata
Release files for package-maximizer 0.21.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Loss of provenance
These files do not have provenance metadata, despite files in a prior release including this data.
We recommend further investigation before installing these files. View details.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| package_maximizer-0.21.0.tar.gz | 147.8 kB | Without provenance | Details for package_maximizer-0.21.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| package_maximizer-0.21.0-py3-none-any.whl | Python 3 | none | any | Details for package_maximizer-0.21.0-py3-none-any.whl |
Total release size: 242.3 kB
Release files / package_maximizer-0.21.0.tar.gz
Loss of provenance
This file belongs to a release without provenance metadata, despite a prior release including this data.
We recommend further investigation before installing this file. View details.
| Download URL | package_maximizer-0.21.0.tar.gz |
|---|---|
| Size | 147.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
355b3cd5f86839c212e1436e7d964a0b3abe3baea2602ffcdd4f328340fcf89b
|
|
BLAKE2b-256 checksum How to use checksums |
749d0665e628878ea0df9333c03adef9edf27a88e4c262c51ce129ecf2ff159b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / package_maximizer-0.21.0-py3-none-any.whl
Loss of provenance
This file belongs to a release without provenance metadata, despite a prior release including this data.
We recommend further investigation before installing this file. View details.
| Download URL | package_maximizer-0.21.0-py3-none-any.whl |
|---|---|
| Size | 94.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
38dc8459bc9ff9e182fe01eab715126f0614273d7a4b0969d75f8a7b24898cec
|
|
BLAKE2b-256 checksum How to use checksums |
cbfa3b9143ffa89c0212819cae19f269845800e438116de4b1c4beed998ec476
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for package-maximizer 0.21.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Loss of provenance
A previous release of these files had provenance metadata, but this release does not.
While this could reflect a routine change by the project maintainers, it may also indicate that the release files have been compromised.
Release comparison
- Removed 0.1.0 2 files With provenance
- Added 0.21.0 2 files Without provenance
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.