Composer: Your requirements could not be resolved — конфликт версий пакетов

  • Обновлено
  • Чтение ≈ 4 минуты

Краткий ответ

Ошибка Composer «Your requirements could not be resolved» означает конфликт версий пакетов или несовместимость с версией PHP и расширениями. Прочитайте пояснение composer why-not, обновите ограничения, проверьте платформенные требования и обновите зависимости по одной.

В этой статье
  1. Как читать сообщение
  2. Порядок
  3. Типичные конфликты
  4. Если ничего не помогает
Composer resolution error
Your requirements could not be resolved to an installable set of packages. Problem 1 - Root composer.json requires ... found ... but it conflicts
По-русскиComposer не нашёл набор версий, удовлетворяющий всем требованиям.

#Как читать сообщение

Composer выводит блок Problem 1, Problem 2 с цепочкой причин: какой пакет требует какую версию другого пакета. Ключевые фразы: requires php ^8.1 but your php version (7.4.33) does not satisfy that requirement — дело в версии PHP; requires ext-gd * but it is missing — не хватает расширения; Root composer.json requires A ^2.0 -> satisfiable by A[2.0.0] ... B v1.0 requires A ^1.0 — два пакета требуют несовместимых версий третьего. Начните с чтения первой причины: обычно она называет главного виновника.

Возможная причинаКак узнатьЧто делать
Версия PHP ниже требуемойПакет новее PHP.requires php ^8.1.Поднимите PHP или возьмите старую версию.
Отсутствует расширениеext-gd, ext-intl.ext-... is missing.Установите расширение.
Несовместимые версии зависимостейДва пакета требуют разное.Problem с цепочкой.Обновите оба.
Старый composer.lockЗафиксированные версии.Не обновляется.composer update пакета.
Заброшенный пакетНе обновляется.Конфликт с новыми.Найдите форк.
Мало памятиТяжёлое разрешение.Killed/memory exhausted.COMPOSER_MEMORY_LIMIT=-1.

#Порядок

  1. Прочитайте сообщение и определите тип конфликта: PHP, расширение илиОткройте терминал в каталоге проекта с composer.json и composer.lock (в VS Code: «Терминал» → «Создать терминал»). Выполните именно команду, вызвавшую конфликт, и найдите в выводе фразы requires php, requires ext-*, conflicts with или is locked to version. Запишите проблемный пакет и ограничения версий. Пока не выясните причину, не удаляйте composer.lock и не запускайте обновление всех пакетов на рабочем сайте.
  2. Проверьте версию PHP и расширенияВ той же среде выполните php -v, php -m и composer check-platform-reqs. Проверьте фактический PHP CLI: на хостинге он может отличаться от PHP-FPM сайта. Если Composer сообщает об отсутствующем ext-intl, ext-gd и т.п., установите расширение через администраторские средства сервера с учётом используемой версии PHP; не отключайте проверку платформы и не подменяйте версию PHP в composer.json ради успешного запуска.
  3. Выясните, кто блокирует нужную версию: composer why-not vendor/packageЕсли конфликт касается конкретной версии пакета, выполните composer prohibits vendor/package 1.2.3 или синоним composer why-not vendor/package 1.2.3, заменив пакет и версию на фактические из вывода. Команда показывает пакет, запрещающий эту версию; ничего не устанавливает. Если пакет уже установлен и нужно узнать, почему, воспользуйтесь следующим шагом.
  4. Посмотрите, что требует пакет: composer why vendor/packageВыполните composer why vendor/package с реальным именем пакета, чтобы увидеть зависимости, которые его требуют. Откройте composer.json, сравните ограничения в require и require-dev и сверьте их с поддерживаемыми версиями по документации конкретных пакетов. Не заменяйте автоматически все ограничения на * — так можно получить несовместимые и небезопасные версии.
  5. Обновите конфликтующие пакеты вместеЕсли найден совместимый набор версий, создайте отдельную ветку Git и резервную копию composer.lock. В каталоге проекта выполните предварительную проверку: composer update vendor/a vendor/b --with-all-dependencies --dry-run, подставив действительные имена. Изучите, какие пакеты будут обновлены/удалены; если список слишком большой, пересмотрите ограничения. Установка выполняется отдельно после тестов и согласования, а не безусловно вслед за проверкой.
  6. Смягчите ограничения версий в composer.json или обновите зависимостьЧтобы исправить ограничения в composer.json, откройте соответствующий блок require в редакторе и измените только конфликтующую зависимость на версию, официально совместимую с вашим PHP и соседними пакетами. Сохраните, выполните composer validate, затем пробное composer update ... --dry-run. Если приложение использует устаревший API, обновите код до реальной установки пакетов.
  7. Если пакет заброшен, найдите заменуЕсли обновление невозможно из-за заброшенной библиотеки, проверьте официальный репозиторий пакета, дату последнего выпуска и совместимые поддерживаемые альтернативы. Переносите код и зависимости на отдельной испытательной ветке с тестами; не скачивайте случайные исправленные архивы и не обнуляйте ограничения для обхода Composer. Если это рабочий сайт, согласуйте план миграции.
  8. Для проверки используйте --dry-runПеред реальным изменением зависимостей выполните composer update vendor/a vendor/b --with-all-dependencies --dry-run (имена подставить), убедитесь, что изменения ожидаемы. После создания резервной копии и прохождения тестов можно запустить такую же команду без --dry-run в тестовой среде, затем composer install на рабочей по согласованному composer.lock. Не используйте --ignore-platform-reqs, если цель — исправить несовместимость.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Версия PHP и расширения на сервере
    Linux · Терминал (Bash)Команда
    Версия PHP и расширения на сервере
    php -v
    php -m | head -50
    composer check-platform-reqs
    Вариант 2Кто мешает установке нужной версии пакета (замените имя)
    Linux · Терминал (Bash)Команда
    Кто мешает установке нужной версии пакета (замените имя)
    composer why-not symfony/console 6.4
    composer why symfony/console
    Вариант 3Показать установленные и доступные версии, проверить дерево зависимостей
    Linux · Терминал (Bash)Команда
    Показать установленные и доступные версии, проверить дерево зависимостей
    composer show -t | head -50
    composer outdated --direct
    Вариант 4Обновить конфликтующие пакеты вместе (пробный запуск без изменений)
    Linux · Терминал (Bash)Команда
    Обновить конфликтующие пакеты вместе (пробный запуск без изменений)
    composer update vendor/a vendor/b --with-all-dependencies --dry-run
    composer update vendor/a vendor/b --with-all-dependencies
    Вариант 5Удалена команда composer config platform.php 8.1.0 как ложное исправление
    Linux · Терминал (Bash)Команда
    Удалена команда composer config platform.php 8.1.0 как ложное исправление
    # Только просмотр текущих требований
    composer config --list | grep -i platform
    # Изменение platform.php без изменения реального PHP не исправит несовместимость
    Вариант 6Удалён потенциально ломающий приложение --ignore-platform-req=ext-gd
    Linux · Терминал (Bash)Команда
    Удалён потенциально ломающий приложение --ignore-platform-req=ext-gd
    # Проверить реальные требования вместо их игнорирования
    composer check-platform-reqs

#Типичные конфликты

#Если ничего не помогает

Для проверки конфликта используйте отдельную копию проекта и сохранённый composer.lock. Выполните composer validate, composer why-not и пробное обновление с --dry-run. Не удаляйте composer.lock и не ослабляйте ограничения без согласования зависимостей — это делает результат неповторяемым.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.