Как я могу устранить ошибку «Не удалось разрешить ваши требования из-за устанавливаемого набора пакетов»?

89

Когда я бегу, composer updateя получаю какой-то проводной вывод.

введите описание изображения здесь

Вот как выглядит мой composer.json.

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.", "keywords": ["framework", "laravel"],
    "license": "MIT",
    "repositories": [{
        "type": "vcs",
        "url": "https://github.com/Zizaco/ardent.git"
    }],
    "require-dev": {
        "phpunit/phpunit": "4.3.*"
    },
    "require": {
        "laravel/framework": "4.2.*", 
        "laravelbook/ardent": "dev-master as 2.4.0", 
        "zizaco/entrust": "dev-master", 
        "sebklaus/profiler": "dev-master", 
        "doctrine/dbal": "dev-master"
    },
    "autoload": {
        "classmap": [
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations", "app/database/seeds", "app/tests",
            "app/libraries"
        ]
    },
    "scripts": {
        "post-install-cmd": [
            "php artisan clear-compiled", 
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "php artisan clear-compiled", 
            "php artisan optimize"
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ]
    },
    "config": {
        "preferred-install": "dist"
    },
    "minimum-stability": "stable"
}

Как мне это исправить?

cyber8200
источник
8
Привет, пожалуйста, замените изображение composer.json текстовым содержимым composer.json. Это позволяет воспроизводить проблемы и редактировать этот файл, чтобы помочь вам. Благодарю.
Йенс А. Кох
2
@ JensA.Koch. Хотел бы я. Это то, чем я собираюсь заниматься вначале. StackOverflow не дает мне публиковать много кода для таких людей с низкой репутацией, как я. Извините, ребята - я бы хотел, чтобы у меня не было этого ограничения.
cyber8200
3
Ах да. Моя вина, не учла ваши баллы. Проголосует, чтобы получить еще ...
Йенс А. Кох

Ответы:

43

У ваших программных зависимостей конфликт несовместимых версий.

В то же время вы хотите установить любую версию Laravel 4.2.x и «zizaco / entrust» из ее основной ветки. И эта главная ветка требует как минимум Laravel 5.0 (грубо говоря).

Проблема заключается в зависимости от веток. Вполне вероятно, что пакет zizaco / entrust когда-то использовал Laravel 4.2 в своей основной ветке, и что вы смогли установить свои зависимости в тот день. Но в тот самый момент, когда эта ветка будет обновлена ​​с требованием несовместимой версии, вы никогда не сможете запустить composer updateи получить обновленные зависимости.

Всегда используйте версии с тегами! В идеале вы должны использовать смягченные требования к версии, которые допускают совместимые обновления. Это должно быть выражено как требование к версии с тильдой и двумя ~1.2числами : установит версию 1.2.0 и выше (например, 1.2.99 или 1.2.100), а также 1.3 и выше. Если вам нужен определенный выпуск исправления: версия с тремя номерами ^1.2.10Caret будет устанавливать 1.2.10 или выше, также 1.3 и выше.

Использование этого требования к версии вместо dev-masterпозволит вам использовать выпущенные версии вместо нестабильного состояния в главной ветке и позволит вам обратиться к самой последней версии, которая все еще работает с Laravel 4.2. Я предполагаю, что это будет версия zizaco / entrust 1.3.0, но версия 1.2 также подойдет. Идите с "zizaco/entrust": "~1.2".

Свен
источник
7
Ключевой ответ на этот пост"zizaco/entrust": "~1.2"
cyber8200
Было бы полезно знать, какая часть сообщения об ошибке заставила вас подумать, что Laravel 5.0это требуется zizaco/entrust.
квант
Что ж, если я правильно помню, я смотрел на указанную библиотеку и видел требования в ней composer.json. И я, вероятно, перефразировал то, что увидел, потому что не было явного требования, а были некоторые его компоненты. В сообщении об ошибке вы видите, что illuminate/support ^5.0это требуется zizaco/entrust, и если вы знаете, что «Laravel» и «Illuminate» в основном одно и то же, вывод должен быть правильным.
Sven
110

Выполните эту команду:

установка композитора --ignore-platform-reqs

или же

обновление композитора --ignore-platform-reqs

Гуфран Хасан
источник
1
Работал как шарм! Спасибо!
Лизеш Шакья
3
Полезно при использовании докера.
Keutelvocht
1
Есть ли недостаток в использовании этого?
Адем Тепе,
@AdemTepe, пожалуйста, это hannesvdvreken.com/2015/01/18/…
Гуфран Хасан
Замечательно, эта команда сработала так, как ожидалось.
Сохан Джангид
40

Я столкнулся с той же проблемой. Я использую микросервисный фреймворк Lumen. Недавно я решил ту же проблему, установив два пакета: -

  1. sudo apt-get install php7.0-mbstring ,
  2. sudo apt-get install php7.0-xml или sudo apt-get install php-xml

После установки вам необходимо выполнить эту команду: - composer update

Надеюсь, это решит проблему. Я работаю над своей системой.

Анкит
источник
Никогда не используйте обновление композитора в производственной среде, это может вызвать проблемы. composer install - это правильная команда для установки. Я голосовал против вас, но голосую за, потому что 1 и 2 верны.
Marcelo Agimóvel
1
В моей ситуации установка php-gd сработала. Composer не упомянул об этом нигде в выходных данных ошибки, даже с включенным подробным флагом (-vvv).
Брэд
1
Я работаю над Ubuntu 20.04. Достаточно было sudo apt-get install php-xml
выполнить
8

Были ли они dev-masterдобавлены автоматически? Избегайте их как ненужных ограничений версии, для использования «любой подходящей версии» "*"или "@dev"если вы не против пакетов разработчика. Я предполагаю, что Entrust - потенциальный нарушитель спокойствия.

Кроме того, "minimum-stability": "stable"накладывает дополнительные ограничения, и

"minimum-stability": "dev",
"prefer-stable": true

является более бесконфликтным, считайте это практическим правилом.

Фляга Эстуса
источник
Проблема заключается в использовании нестабильных версий dev. Слепое их разрешение (даже если вы предпочитаете стабильную работу) - ключ к неразрешимому беспорядку.
Sven
@Sven Ответ напрямую касается проблемы, что является dev-masterограничением. В нем не говорится, что ограничения свободной версии - это хорошо - они, вероятно, приведут к беспорядку, и это на совести разработчиков. Тот факт, что ответ по поводу тегов не является однозначным, не делает его неправильным. Спасибо за отрицательный голос, кстати. Это довольно этично - отрицать соседние ответы.
Estus Flask
Я согласен, что этот ответ правильный, исходя из того, что было задано. У меня это тоже сработало. Проголосовал!
tmarois
2

Я решил ту же проблему, установив 'laravel/framework'версию зависимости от "^8.0"до "^7.0".

После этого бег composer update --ignore-platform-reqsпросто работал

composer.json

nicolasDevDes
источник
На сегодняшний день последняя версия фреймворка Laravel - 7.10. Итак, как ваша зависимость поднялась до 8.0?
Дигвиджай
не уверен, честно говоря, так как я новичок в Laravel. Это была совершенно новая установка с вознями с файлом
composer.json
1

Добавить "barryvdh/laravel-cors": "^0.7.3"в концеrequire массива внутри composer.json

Сохраните composer.json и запустите composer update

Вы сделали !

Тахир Ясин
источник
2
Люди никогда не должны использовать обновление композитора для установки зависимостей. Он должен использовать установку композитора. Обновление Composer обновит все зависимости, и это может иметь катастрофические последствия.
Марсело Агимовель
0

Я столкнулся с этой проблемой в Laravel 5.8, что я сделал, это сделал composer requireдля каждой библиотеки и всех, где она установлена ​​правильно.

Вот так:

вместо добавления в файл composer.json или указания версии:

composer require msurguy/honeypot: dev-master

Вместо этого я не указал никакой версии:

composer require msurguy/honeypot

Надеюсь, это поможет, спасибо

Черная жемчужина
источник
0
"config": {
  "platform": {
    "ext-pcntl": "7.2",
    "ext-posix": "7.2"
  }
}
Полный Heleno
источник
0

Я решил ту же ошибку, добавив "zizaco/entrust": "*"вместо "zizaco/entrust": "~1.2".

НадЗ
источник
0

Я использую машину Windows 10, работающую с PHP 8 и Lavarel 8, и у меня такая же ошибка, я использовал следующую команду: -

composer update --ignore-platform-reqs

для обновления всех пакетов независимо от конфликтов версий.

ведомый__7
источник
-1

ПРИЧИНА:

Ошибка возникает из-за того, что папка вашего проекта принадлежит пользователю root.

РЕШЕНИЕ

Измените владельца на текущего авторизованного пользователя, а не на пользователя root. Если у вас есть только root как единственный пользователь, создайте другого пользователя с привилегиями root.

$ sudo chown -R текущий_пользователь / мой / проект / каталог /

тогда

$ composer install

Саймон Ньенга
источник
-7

Просто активируйте завиток в файле php.ini

;extension=php_curl.dll

к

extension=php_curl.dll

а затем композитор установить

Gideao
источник
Я не совсем уверен, что активирует php_curl.dll в случае несоответствия версий (Laravel 4.x vs Laravel 5.x). Вы можете объяснить, как это решит вопрос?
Крис Форренс
У меня была проблема, описанная выше, поэтому я активировал завиток, и проблема была решена. Я считаю, что композитор или laravel использует это расширение php для загрузки пакетов. В моем случае это не было бы точно несовместимым с пакетами laravel, композитору просто было бы сложно загрузить пакеты.
Gideao