Wie kann ich den Fehler "Ihre Anforderungen konnten nicht in einen installierbaren Satz von Paketen aufgelöst werden" beheben?

84

Wenn ich laufe, composer updateerhalte ich einen Kabelausgang.

Geben Sie hier die Bildbeschreibung ein

Hier sieht mein composer.json aus.

{
    "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"
}

Wie behebe ich das?

cyber8200
quelle
8
Hey, bitte tausche das Bild composer.json mit dem Textinhalt von composer.json aus. Dies ermöglicht die problemlose Reproduktion und Bearbeitung dieser Datei, um Ihnen zu helfen. Vielen Dank.
Jens A. Koch
2
@ JensA.Koch. Ich wünschte, ich könnte. Das, was ich am Anfang vorhabe. StackOverflow hindert mich daran, viel Code für Leute mit geringen Wiederholungszahlen wie mich zu veröffentlichen. Es tut mir leid, Leute - ich wünschte, ich hätte diese Einschränkung nicht.
Cyber8200
3
Ah richtig. Meine Schuld, habe deine Punkte nicht berücksichtigt. Wird upvote, damit Sie mehr bekommen ...
Jens A. Koch

Antworten:

40

Ihre Software-Abhängigkeiten weisen einen inkompatiblen Versionskonflikt auf.

Gleichzeitig möchten Sie eine beliebige Laravel 4.2.x-Version und "zizaco / entrust" aus der Hauptniederlassung installieren. Und dieser Hauptzweig benötigt mindestens Laravel 5.0 (ungefähr).

Das Problem ergibt sich aus der Abhängigkeit von Zweigen. Es ist wahrscheinlich, dass das Paket zizaco / entrust einmal Laravel 4.2 in seiner Hauptniederlassung verwendet hat und dass Sie Ihre Abhängigkeiten an diesem Tag installieren konnten. In dem Moment, in dem dieser Zweig mit einer inkompatiblen Versionsanforderung aktualisiert wird, können Sie niemals composer updateAbhängigkeiten ausführen und aktualisieren.

Verwenden Sie immer getaggte Versionen! Idealerweise verwenden Sie eine entspannte Versionsanforderung, die kompatible Updates ermöglicht. Dies sollte als Anforderung an eine Tilde-Two-Number-Version ausgedrückt werden: ~1.2Installiert eine Version 1.2.0 und höher (wie 1.2.99 oder 1.2.100) sowie 1.3 und höher. Wenn Sie eine bestimmte Patch-Version benötigen: Die Caret-Three-Number-Version ^1.2.10installiert 1.2.10 oder höher, auch 1.3 und höher.

Wenn Sie diese Versionsanforderung anstelle von verwenden dev-master, können Sie freigegebene Versionen anstelle des instabilen Status im Hauptzweig verwenden und die neueste Version adressieren, die noch mit Laravel 4.2 funktioniert. Ich denke, das wäre zizaco / entrust Version 1.3.0, aber Version 1.2 würde sich auch qualifizieren. Geh mit "zizaco/entrust": "~1.2".

Sven
quelle
7
Die Schlüsselantwort auf diesen Beitrag ist"zizaco/entrust": "~1.2"
cyber8200
Es wäre hilfreich zu wissen, welcher Teil der Fehlermeldung Sie für Laravel 5.0erforderlich hielt zizaco/entrust.
Quant
Wenn ich mich richtig erinnere, habe ich mir die erwähnte Bibliothek angesehen und die Anforderungen in der Datei composer.json gesehen. Und ich habe wahrscheinlich umschrieben, was ich gesehen habe, weil es keine explizite Anforderung gab, sondern einige Komponenten davon. In der Fehlermeldung sehen Sie, dass dies illuminate/support ^5.0erforderlich ist zizaco/entrust, und wenn Sie wissen, dass "Laravel" und "Illuminate" im Grunde dasselbe sind, sollte die Schlussfolgerung korrekt sein.
Sven
94

Führen Sie diesen Befehl aus:

Composer installieren --ignore-platform-reqs

oder

Komponisten-Update --ignore-platform-reqs

Gufran Hasan
quelle
1
Lief wie am Schnürchen! Vielen Dank!
Lizesh Shakya
2
Nützlich bei Verwendung von Docker.
Keutelvocht
Gibt es einen Nachteil bei der Verwendung?
Adem Tepe
@AdemTepe, bitte diese hannesvdvreken.com/2015/01/18/…
Gufran Hasan
40

Ich stehe vor dem gleichen Problem. Ich verwende das Lumen-Microservice-Framework. Ich habe das gleiche Problem kürzlich durch die Installation von zwei Paketen behoben: -

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

Nach der Installation müssen Sie den folgenden Befehl ausführen: - Composer-Update

Hoffe, es wird das Problem lösen. Ich arbeite an meinem System.

Ankit
quelle
Benutzer sollten Composer-Updates niemals in der Produktion verwenden, da dies zu Problemen führen kann. Die Installation von Composer ist der richtige Befehl zum Installieren. Ich habe dich herabgestimmt, aber ich habe hochgestimmt, weil 1 und 2 korrekt sind.
Marcelo Agimóvel
In meiner Situation hat die Installation von php-gd den Trick gemacht. Composer hat dies in der Fehlerausgabe auch bei aktiviertem Flag "-vvv" nirgendwo erwähnt.
Brad
1
Ich arbeite an Ubuntu 20.04. Nur diesen Befehl sudo apt-get install php-xml
auszuführen
8

Wurden diese dev-masterautomatisch hinzugefügt? Vermeiden Sie sie als unnötige Versionsbeschränkungen, für die Verwendung "jeder geeigneten Version" "*"oder "@dev"wenn Sie nichts gegen Entwicklungspakete haben. Ich vermute, dass Entrust der potenzielle Unruhestifter ist.

Außerdem werden "minimum-stability": "stable"zusätzliche Einschränkungen auferlegt, und

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

ist konfliktfreier, betrachten Sie es als Faustregel.

Estus Flask
quelle
Das Problem ist die Verwendung instabiler Entwicklungsversionen. Sie blind zuzulassen (auch wenn sie Stall bevorzugen) ist der Schlüssel zu einem nicht zu wartenden Durcheinander.
Sven
@Sven Die Antwort spricht das Problem direkt an, was eine dev-masterEinschränkung darstellt. Es heißt nicht, dass lose Versionsbeschränkungen gut sind - sie werden wahrscheinlich zu einem Durcheinander führen, und dies liegt im Gewissen des Entwicklers. Die Tatsache, dass die Antwort keine Meinung zum Markieren hat, macht es nicht falsch. Ich danke übrigens für eine Ablehnung. Es ist ziemlich ethisch, benachbarte Antworten abzulehnen.
Estus Flask
Ich bin damit einverstanden, dass diese Antwort auf der Grundlage der Fragen korrekt ist. Es hat auch bei mir funktioniert. Abgestimmt!
Tmarois
2

Ich habe das gleiche Problem beim Einstellen der 'laravel/framework'Abhängigkeitsversion von "^8.0"bis gelöst "^7.0".

Danach hat das Laufen composer update --ignore-platform-reqseinfach geklappt

composer.json

nicolasDevDes
quelle
Ab heute ist die neueste Laravel-Framework-Version 7.10. Wie ist Ihre Abhängigkeit auf 8.0 gestiegen?
Digvijay
Ich bin mir ehrlich gesagt nicht sicher, da ich ziemlich neu bei Laravel bin. Es war eine brandneue Installation mit Unordnung mit der Datei composer.json
nicolasDevDes
1

Fügen Sie "barryvdh/laravel-cors": "^0.7.3"am Ende des requireArrays in composer.json hinzu

Speichern Sie composer.json und führen Sie es aus composer update

Du bist fertig !

Tahir Yasin
quelle
2
Benutzer sollten niemals Composer-Updates verwenden, um Abhängigkeiten zu installieren. Es sollte Composer Install verwenden. Das Composer-Update aktualisiert alle Abhängigkeiten und das könnte katastrophal sein.
Marcelo Agimóvel
0

Ich bin in Laravel 5.8 auf dieses Problem gestoßen. Ich habe es composer requirefür jede Bibliothek getan und alle wurden korrekt installiert.

Wie so:

anstatt es der Datei composer.json hinzuzufügen oder eine Version anzugeben:

composer require msurguy/honeypot: dev-master

Ich habe stattdessen ohne Angabe einer Version verzichtet:

composer require msurguy/honeypot

Ich hoffe es hilft, danke

Schwarze Perle
quelle
0
"config": {
  "platform": {
    "ext-pcntl": "7.2",
    "ext-posix": "7.2"
  }
}
Volle Heleno
quelle
0

Ich habe den gleichen Fehler gelöst, indem ich "zizaco/entrust": "*"anstelle von hinzugefügt habe "zizaco/entrust": "~1.2".

NadZ
quelle
-1

URSACHE:

Der Fehler tritt auf, weil Ihr Projektordner dem Root-Benutzer gehört.

LÖSUNG

Ändern Sie den Besitz auf den aktuell angemeldeten Benutzer und nicht auf den Root-Benutzer. Wenn Sie nur root als einzigen Benutzer haben, erstellen Sie einen anderen Benutzer mit Root-Rechten.

$ sudo chown -R aktueller_benutzer / mein / projekt / verzeichnis /

dann

$ composer installieren

Simon Njenga
quelle
-7

Aktivieren Sie einfach die Locke in der Datei php.ini

;extension=php_curl.dll

zu

extension=php_curl.dll

und dann Composer installieren

Gideao
quelle
Ich bin mir nicht ganz sicher, was die Aktivierung von php_curl.dll für eine nicht übereinstimmende Version bewirken wird (Laravel 4.x vs Laravel 5.x). Können Sie erklären, wie dies die Frage lösen würde?
Chris Forrence
Ich hatte das oben beschriebene Problem, also habe ich die Locke aktiviert und das Problem wurde gelöst. Ich glaube, dass der Komponist oder Laravel diese PHP-Erweiterung verwendet, um die Pakete herunterzuladen. In meinem Fall wäre es nicht genau inkompatibel mit den Laravel-Paketen, es wäre nur eine Schwierigkeit für den Komponisten, die Pakete herunterzuladen.
Gideao