Skip to main content

Package Maximizer

Python Version License PyPI PyPI Downloads ReadTheDocs GitHub Issues GitHub Stars

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:

  1. Запустите тесты: python -m pytest tests/
  2. Проверьте форматирование: black .
  3. Проверьте линтеры: flake8 .

📞 Контакты

Ссылка Описание
GitHub dominicusin/package-maximizer
WWW dominicusin.github.io/package-maximizer
PyPI package-maximizer
ReadTheDocs docs
Email team@package-maximizer.dev

🎉 Благодарности


Package Maximizer — Ваш помощник в управлении пакетами! 🚀

Metadata

Release files for package-maximizer 0.16.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for package-maximizer 0.16.0
File Size Uploaded
package_maximizer-0.16.0.tar.gz 137.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for package-maximizer 0.16.0
File Interpreter ABI Platform
package_maximizer-0.16.0-py3-none-any.whl Python 3 none any Details

Total release size: 226.8 kB

Release files / package_maximizer-0.16.0.tar.gz

Download URL package_maximizer-0.16.0.tar.gz
Size 137.7 kB
Tags Source
SHA-256 checksum
How to use checksums
1f23bc911dc9a2c2b9c245a94c7d67eb9ad13b9c0621eead4ab0fe6d510fabac
BLAKE2b-256 checksum
How to use checksums
5f2506e9b3ebcc37f1fafc31643a1eea00f891392e00a43ccdb397ca579c64d0
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.16.0-py3-none-any.whl

Download URL package_maximizer-0.16.0-py3-none-any.whl
Size 89.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
626919906997ead881505b5b50b2dac6290ddd1ee6991c7644a096a74367ae01
BLAKE2b-256 checksum
How to use checksums
ed753a50580844a4e4ea9e95a81de89a54fdce535b0dcb9e8eb26ba279ea7f5a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.16.0 This release

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page