Skip to content

About

Модульная система для максимизации непротиворечивого множества пакетов

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

132 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 — Ваш помощник в управлении пакетами! 🚀

About

Модульная система для максимизации непротиворечивого множества пакетов

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages