Як я можу вирішити помилку "Ваші вимоги не можуть бути вирішені до встановленого набору пакетів"?


84

Коли я запускаю, 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"
}

Як це виправити?


8
Привіт, обміняйте зображення composer.json із текстовим вмістом composer.json. Це дозволяє відтворити та відредагувати цей файл, щоб допомогти вам. Дякую.
Йенс А. Кох

2
@ JensA.Koch. Я би хотів, щоб те, що я маю намір зробити спочатку. StackOverflow заважає мені публікувати багато коду для таких людей, як я. Вибачте, хлопці - хотілося б, щоб у мене не було цього обмеження.
cyber8200

3
Ах, правильно. Моя вина, не врахував ваші бали. Проголосую, щоб ви отримали ще ...
Jens A. Koch

Відповіді:


40

Залежності вашого програмного забезпечення мають несумісну конфлікт версій.

Одночасно ви хочете встановити будь-яку версію 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 і вище. Якщо вам потрібен певний випуск виправлення: версія Caret-three-number ^1.2.10встановить 1.2.10 або новішу версію , а також 1.3 і новішу версію .

Застосування цієї вимоги до версії замість dev-masterдозволить використовувати випущені версії замість нестабільного стану у гілці 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" - це в основному одне і те ж, висновок повинен бути правильним.
Свен

94

Виконайте цю команду:

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

або

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


1
Працював як оберіг! Дякую!
Лізеш Шак'я,

2
Корисно при використанні докера.
Keutelvocht

Будь-який недолік використання цього?
Адем Тепе

@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 install - це правильна команда для встановлення. Я підтримав вас, але голосую, тому що 1 і 2 правильні.
Марсело Агімовель

У моїй ситуації встановлення php-gd зробило трюк. Композитор ніде не згадував про це у вихідних даних про помилку, навіть якщо ввімкнено багатослівний (-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

є більш безконфліктним, вважайте це емпіричним правилом.


Проблема полягає у використанні нестабільних версій розробників. Сліпо дозволяти їм (навіть якщо воліють стабільний) - це запорука неможливої ​​безладу.
Свен

@Sven Відповідь безпосередньо вирішує проблему, яка є dev-masterобмеженням. Це не стверджує, що обмежені версії версій хороші - вони, ймовірно, призведуть до безладу, і це на совісті розробника. Той факт, що відповідь не викликає сумнівів щодо тегування, не робить її неправильною. Я, до речі, дякую за голос проти. Це цілком етично, щоб голосувати проти сусідніх відповідей.
Estus Flask

Я згоден, що ця відповідь є правильною залежно від того, що запитували. Це також спрацювало у мене. Проголосував!
tmarois

2

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

Після цього біг composer update --ignore-platform-reqsпросто працював

composer.json


На сьогодні остання версія фреймворку Laravel - 7.10. То як ваша залежність зросла до 8,0?
Дігвіяй

не впевнений чесно, оскільки я досить новачок у Laravel. Це була абсолютно нова інсталяція, в якій
зіпсували

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

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


-1

ПРИЧИНА:

Помилка трапляється, оскільки папка проекту належить кореневому користувачеві.

РІШЕННЯ

Змініть власника на поточного користувача, що ввійшов у систему, а не на кореневого користувача. Якщо у вас єдиним користувачем є лише root, створіть іншого користувача з правами root.

$ sudo chown -R поточний_користувач / мій / проект / каталог /

тоді

$ composer встановити


-7

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

;extension=php_curl.dll

до

extension=php_curl.dll

а потім композитор встановити


Я не зовсім впевнений, що активує php_curl.dll для невідповідності версії (Laravel 4.x проти Laravel 5.x). Чи можете ви пояснити, як це може вирішити питання?
Кріс Форренс

У мене була проблема, описана вище, тому я активував завиток, і проблема була вирішена. Я вважаю, що композитор або laravel використовує це розширення php для завантаження пакетів. У моєму випадку це було б не зовсім несумісно з пакетами laravel, композитору було б просто складно завантажити пакети.
Gideao
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.