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


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.