Jak mogę rozwiązać błąd „Twoje wymagania nie mogą zostać zamienione na zestaw pakietów do zainstalowania”?

92

Kiedy uruchamiam composer update, otrzymuję wyjście przewodowe.

wprowadź opis obrazu tutaj

Oto mój plik 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"
}

Jak to naprawić?

cyber8200
źródło
9
Hej, zamień obraz composer.json z tekstem z pliku composer.json. Pozwala to na problematyczne odtwarzanie i edycję tego pliku, aby Ci pomóc. Dzięki.
Jens A. Koch
3
@ JensA.Koch. Żałuję, że nie mogę. To, co zamierzam zrobić na początku. StackOverflow powstrzymuje mnie przed publikowaniem dużej ilości kodu dla osób o niskiej reputacji, takich jak ja. Przepraszam chłopaki - szkoda, że ​​nie mam tego ograniczenia.
cyber8200
4
Ah, tak. Moja wina, nie wziąłem pod uwagę twoich punktów. Zagłosuję za, więc dostaniesz więcej ...
Jens A. Koch

Odpowiedzi:

44

W zależnościach oprogramowania występuje konflikt niezgodnej wersji.

Jednocześnie chcesz zainstalować dowolną wersję Laravela 4.2.x i "zizaco / entrust" z jego głównej gałęzi. A ta gałąź główna wymaga przynajmniej Laravel 5.0 (z grubsza mówiąc).

Problem wynika z zależności od gałęzi. Prawdopodobnie pakiet zizaco / entrust kiedyś używał Laravel 4.2 w swojej gałęzi master i tego dnia mogłeś zainstalować zależności. Ale w momencie, gdy ta gałąź zostanie zaktualizowana z niekompatybilną wersją, nigdy nie będziesz w stanie uruchomić composer updatei uzyskać zaktualizowanych zależności.

Zawsze używaj wersji oznaczonych! W idealnym przypadku używasz mniej rygorystycznej wersji, która pozwala na zgodne aktualizacje. Powinno to być wyrażone jako wymaganie dla ~1.2wersji z dwoma tyldami : zainstalowałoby wersję 1.2.0 i nowsze (np. 1.2.99 lub 1.2.100), a także 1.3 i nowsze. Jeśli potrzebujesz określonego wydania poprawki: Wersja z trzema numerami Caret^1.2.10 zainstaluje 1.2.10 lub , a także 1.3 i nowsze.

Użycie tego wymagania wersji zamiast dev-masterpozwoli ci na użycie wydanych wersji zamiast niestabilnego stanu w gałęzi master i pozwoli ci zaadresować najnowszą wersję, która nadal działa z Laravel 4.2. Wydaje mi się, że byłaby to wersja zizaco / entrust 1.3.0, ale wersja 1.2 również by się kwalifikowała. Idź z "zizaco/entrust": "~1.2".

Sven
źródło
7
Kluczową odpowiedzią na ten post jest"zizaco/entrust": "~1.2"
cyber8200
Dobrze byłoby wiedzieć, która część komunikatu o błędzie sugerowała, że ​​jest Laravel 5.0to wymagane przez zizaco/entrust.
ilość
Cóż, jeśli dobrze pamiętam, patrzyłem na wspomnianą bibliotekę i zobaczyłem wymagania w jej pliku composer.json. I prawdopodobnie sparafrazowałem to, co zobaczyłem, ponieważ nie było wyraźnego wymogu, ale niektóre jego elementy. W komunikacie o błędzie widzisz, że illuminate/support ^5.0jest to wymagane przez zizaco/entrusti jeśli wiesz, że „Laravel” i „Illuminate” to w zasadzie to samo, wniosek powinien być poprawny.
Sven
113

Uruchom to polecenie:

Composer install --ignore-platform-reqs

lub

aktualizacja Composera --ignore-platform-reqs

Gufran Hasan
źródło
1
Działał jak urok! Dziękuję Ci!
Lizesh Shakya
3
Przydatne przy korzystaniu z dockera.
Keutelvocht
1
Jakieś wady korzystania z tego?
Adem Tepe
@AdemTepe, proszę to hannesvdvreken.com/2015/01/18/ ...
Gufran Hasan
Świetnie, to polecenie działało zgodnie z oczekiwaniami.
Sohan Jangid
40

Mam ten sam problem. Używam struktury mikrousług „Lumen”. Niedawno rozwiązałem ten sam problem, instalując dwa pakiety: -

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

Po zainstalowaniu tego, musisz wykonać to polecenie: - aktualizacja kompozytora

Mam nadzieję, że to rozwiąże problem. Pracuję na moim systemie.

Ankit
źródło
Ludzie nigdy nie powinni używać aktualizacji kompozytora w produkcji, może to powodować problemy. Instalacja kompozytora to właściwe polecenie do zainstalowania. Głosowałem za tobą, ale głosuję za, ponieważ 1 i 2 są poprawne.
Marcelo Agimóvel
1
W mojej sytuacji wystarczyło zainstalowanie php-gd. Composer nie wspomniał o tym nigdzie w wyniku błędu, nawet z włączoną flagą gadatliwą (-vvv).
Brad
1
Pracuję na Ubuntu 20.04. Wystarczyło sudo apt-get install php-xml
samo wykonanie
8

Czy zostały dev-masterdodane automatycznie? Unikaj ich jako niepotrzebnych ograniczeń wersji, do użycia „dowolnej odpowiedniej wersji” "*"lub "@dev"jeśli nie masz nic przeciwko pakietom programistycznym. Domyślam się, że Entrust jest potencjalnym sprawcą kłopotów.

Ponadto "minimum-stability": "stable"nakłada dodatkowe ograniczenia i

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

jest bardziej wolny od konfliktów, potraktuj to jako praktyczną zasadę.

Estus Flask
źródło
Problemem jest używanie niestabilnych wersji deweloperskich. Ślepe pozwolenie im (nawet jeśli wolisz stabilne) jest kluczem do nieusuwalnego bałaganu.
Sven
@Sven Odpowiedź bezpośrednio odnosi się do problemu, którym jest dev-masterograniczenie. Nie stwierdza, że ​​ograniczenia luźnej wersji są dobre - prawdopodobnie spowodują bałagan, a to na sumieniu programisty. Fakt, że w odpowiedzi nie ma opinii na temat tagowania, nie oznacza, że ​​jest błędna. Nawiasem mówiąc, dziękuję za głos przeciw. Negowanie odpowiedzi na sąsiednie odpowiedzi jest dość etyczne.
Estus Flask
Zgadzam się, że ta odpowiedź jest poprawna na podstawie tego, o co pytano. U mnie też się udało. Zagłosowano!
tmarois
2

Rozwiązałem ten sam problem ustawiając 'laravel/framework'wersję zależności od "^8.0"do "^7.0".

Po tym bieganie composer update --ignore-platform-reqspo prostu działało

composer.json

nicolasDevDes
źródło
Na dzień dzisiejszy najnowsza wersja frameworka Laravel to 7.10. Jak więc twoja zależność wzrosła do 8,0?
Digvijay
nie jestem pewien, szczerze mówiąc, ponieważ jestem całkiem nowy w Laravel. To była zupełnie nowa instalacja z mieszaniem z plikiem composer.json
nicolasDevDes
1

Dodaj "barryvdh/laravel-cors": "^0.7.3"na końcu requiretablicy wewnątrz pliku composer.json

Zapisz plik composer.json i uruchom composer update

Gotowe!

Tahir Yasin
źródło
2
Ludzie nigdy nie powinni używać aktualizacji Composera do instalowania zależności. Powinien używać instalacji Composer. Aktualizacja Composer zaktualizuje wszystkie zależności, co może być katastrofalne.
Marcelo Agimóvel
0

Napotkałem ten problem w Laravel 5.8, co zrobiłem, to zrobiłem composer require dla każdej biblioteki i wszystkie zostały poprawnie zainstalowane.

Tak jak to:

zamiast dodawać go do pliku composer.json lub określać wersję:

composer require msurguy/honeypot: dev-master

Zamiast tego zrobiłem bez określania żadnej wersji:

composer require msurguy/honeypot

Mam nadzieję, że to pomoże, dzięki

Czarna Perła
źródło
0
"config": {
  "platform": {
    "ext-pcntl": "7.2",
    "ext-posix": "7.2"
  }
}
Pełna Heleno
źródło
0

Rozwiązałem ten sam błąd, dodając "zizaco/entrust": "*"zamiast "zizaco/entrust": "~1.2".

NadZ
źródło
0

Używam maszyny z systemem Windows 10 współpracującej z PHP 8 i Lavarel 8 i otrzymałem ten sam błąd, użyłem następującego polecenia: -

composer update --ignore-platform-reqs

aby zaktualizować wszystkie pakiety niezależnie od konfliktów wersji.

skrzydłowy__7
źródło
-1

PRZYCZYNA:

Błąd występuje, ponieważ właścicielem folderu projektu jest użytkownik root.

ROZWIĄZANIE

Zmień własność na aktualnie zalogowanego użytkownika, a nie użytkownika root. Jeśli masz tylko roota jako jedynego użytkownika, utwórz innego użytkownika z uprawnieniami roota.

$ sudo chown -R current_user / my / project / directory /

następnie

$ composer install

Simon Njenga
źródło
-7

Po prostu aktywuj curl w pliku php.ini

;extension=php_curl.dll

do

extension=php_curl.dll

a następnie zainstaluj program Composer

Gideao
źródło
Nie jestem do końca pewien, co spowoduje aktywacja php_curl.dll w przypadku niezgodności wersji (Laravel 4.x vs Laravel 5.x). Czy możesz wyjaśnić, jak to rozwiązałoby pytanie?
Chris Forrence,
Miałem problem opisany powyżej, więc aktywowałem podkręcenie i problem został rozwiązany. Uważam, że kompozytor lub laravel używa tego rozszerzenia php do pobierania pakietów. W moim przypadku nie byłoby to dokładnie niekompatybilne z pakietami laravel, po prostu kompozytor miałby trudności z pobraniem pakietów.
Gideao,