8000 GitHub - dominicusin/package-maximizer at v0.6.0 · GitHub
[go: up one dir, main page]

Skip to content

About

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

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

93 Commits

Folders and files

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

0