¿Cómo puedo resolver el error "Sus requisitos no se pudieron resolver en un conjunto de paquetes instalable"?

84

Cuando ejecuto composer update, recibo una salida por cable.

ingrese la descripción de la imagen aquí

Aquí está mi aspecto 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"
}

Cómo arreglo eso ?

cyber8200
fuente
8
Oye, intercambia la imagen composer.json con el contenido de texto de composer.json. Esto permite la reproducción y edición de problemas de ese archivo para ayudarlo. Gracias.
Jens A. Koch
2
@ JensA.Koch. Ojalá pudiera. Eso es lo que pretendo hacer al principio. StackOverflow me impide publicar una gran cantidad de código para personas de baja representación como yo. Lo siento chicos, desearía no tener esa restricción.
cyber8200
3
Ah bien. Fue culpa mía, no tomé en cuenta tus puntos. Votaré para que obtengas más ...
Jens A. Koch

Respuestas:

40

Sus dependencias de software tienen un conflicto de versión incompatible.

Al mismo tiempo, desea instalar cualquier versión de Laravel 4.2.xy "zizaco / entrust" desde su rama maestra. Y esa rama maestra requiere al menos Laravel 5.0 (en términos generales).

El problema proviene de la dependencia de las ramas. Es probable que el paquete zizaco / entrust alguna vez usara Laravel 4.2 en su rama maestra y que pudieras instalar tus dependencias ese día. Pero en el mismo momento en que esta rama se actualice con un requisito de versión incompatible, nunca podrá ejecutar composer updatey obtener dependencias actualizadas.

¡Utilice siempre versiones etiquetadas! Lo ideal es que utilice un requisito de versión relajado que permita actualizaciones compatibles. Esto debe expresarse como un requisito de versión de tilde-two-number: ~1.2instalaría una versión 1.2.0 y superior (como 1.2.99 o 1.2.100), y también 1.3 y superior. Si necesita una versión de parche determinada: Caret-three-number version ^1.2.10instalará 1.2.10 o superior, también 1.3 y superior.

El uso de este requisito de versión en lugar de dev-masterle permitirá usar versiones publicadas en lugar del estado inestable en la rama maestra, y le permitirá abordar la versión más reciente que aún funciona con Laravel 4.2. Supongo que sería la versión 1.3.0 de zizaco / entrust, pero la versión 1.2 también calificaría. Ir con "zizaco/entrust": "~1.2".

Sven
fuente
7
La respuesta clave a esta publicación es"zizaco/entrust": "~1.2"
cyber8200
Sería útil saber qué parte del mensaje de error le hizo pensar que Laravel 5.0lo requería zizaco/entrust.
cuantía
Bueno, si mal no recuerdo, estaba mirando la biblioteca mencionada y vi los requisitos en su composer.json. Y probablemente parafraseé lo que vi porque no había ningún requisito explícito, sino algunos componentes. En el mensaje de error, verá que illuminate/support ^5.0es requerido por zizaco/entrust, y si sabe que "Laravel" e "Illuminate" son básicamente lo mismo, la conclusión debería ser correcta.
Sven
94

Ejecute este comando:

instalación del compositor --ignore-platform-reqs

o

actualización del compositor --ignore-platform-reqs

Gufran Hasan
fuente
1
¡Trabajado como un encanto! ¡Gracias!
Lizesh Shakya
2
Útil cuando se usa Docker.
Keutelvocht
¿Alguna desventaja de usar esto?
Adem Tepe
@AdemTepe, por favor esto hannesvdvreken.com/2015/01/18/…
Gufran Hasan
40

Estoy enfrentando el mismo problema. Estoy usando el marco de microservicio 'Lumen'. Recientemente resolví el mismo problema instalando dos paquetes: -

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

Después de instalar esto, debe ejecutar este comando: - actualización del compositor

Espero que resuelva el problema. Trabajo en mi sistema.

Ankit
fuente
Las personas nunca deben usar la actualización del compositor en producción, esto puede causar problemas. composer install es el comando correcto para instalar. Te voté en contra, pero estoy a favor porque 1 y 2 son correctos.
Marcelo Agimóvel
En mi situación, la instalación de php-gd funcionó. Composer no mencionó esto en ninguna parte de la salida de falla, incluso con el indicador detallado (-vvv) activado.
Brad
1
Estoy trabajando en Ubuntu 20.04. Solo ejecutar este comando fue suficiente:sudo apt-get install php-xml
Loïch
8

¿Se dev-masteragregaron esos mensajes automáticamente? Evítelos como restricciones de versión innecesarias, para el uso de 'cualquier versión adecuada' "*", o "@dev"si no le importan los paquetes de desarrollo. Supongo que Entrust es el potencial alborotador.

Además, "minimum-stability": "stable"impone restricciones adicionales y

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

está más libre de conflictos, considérelo una regla general.

Matraz Estus
fuente
El problema es el uso de versiones de desarrollo inestables. Permitirlos ciegamente (incluso si prefiere establo) es la clave para un desastre que no se puede mantener.
Sven
@Sven La respuesta aborda el problema directamente, que es la dev-masterrestricción. No dice que las restricciones de versiones sueltas sean buenas; probablemente resultarán en un lío, y esto está en la conciencia del desarrollador. El hecho de que la respuesta no tenga opiniones sobre el etiquetado no significa que sea incorrecta. Gracias por un voto negativo, por cierto. Es bastante ético rechazar las respuestas de los vecinos.
Estus Flask
Estoy de acuerdo en que esta respuesta es correcta según lo que se preguntó. También funcionó para mí. ¡Votado!
tmarois
2

Resolví el mismo problema configurando 'laravel/framework'la versión de dependencia de "^8.0"a "^7.0".

Después de eso, correr composer update --ignore-platform-reqssimplemente funcionó

composer.json

nicolasDevDes
fuente
A partir de hoy, la última versión del marco de Laravel es la 7.10. Entonces, ¿cómo subió su dependencia a 8.0?
Digvijay
no estoy seguro, honestamente, ya que soy bastante nuevo con Laravel. Era una instalación completamente nueva con jugar con el archivo composer.json
nicolasDevDes
1

Agregue "barryvdh/laravel-cors": "^0.7.3"al final de la requirematriz dentro de composer.json

Guarde composer.json y ejecute composer update

Estás listo !

Tahir Yasin
fuente
2
La gente nunca debería usar la actualización del compositor para instalar dependencias. Debería usar composer install. La actualización de Composer actualizará todas las dependencias y eso podría ser catastrófico.
Marcelo Agimóvel
0

Encontré este problema en Laravel 5.8, lo que hice fue hacer composer requirepara cada biblioteca y todas estaban instaladas correctamente.

Al igual que:

en lugar de agregarlo al archivo composer.json o especificar una versión:

composer require msurguy/honeypot: dev-master

En cambio, lo hice sin especificar ninguna versión:

composer require msurguy/honeypot

Espero que ayude, gracias

Perla Negra
fuente
0
"config": {
  "platform": {
    "ext-pcntl": "7.2",
    "ext-posix": "7.2"
  }
}
Heleno completo
fuente
0

Resolví el mismo error agregando en "zizaco/entrust": "*"lugar de "zizaco/entrust": "~1.2".

NadZ
fuente
-1

PORQUE:

El error ocurre porque la carpeta del proyecto es propiedad del usuario root.

SOLUCIÓN

Cambie la propiedad al usuario que ha iniciado sesión actualmente y no al usuario root. Si solo tiene root como único usuario, cree otro usuario con privilegios de root.

$ sudo chown -R actual_usuario / mi / proyecto / directorio /

entonces

$ composer install

Simón Njenga
fuente
-7

Simplemente active el curl en el archivo php.ini

;extension=php_curl.dll

a

extension=php_curl.dll

y luego el compositor instala

Gideao
fuente
No estoy muy seguro de qué hará la activación de php_curl.dll para una falta de coincidencia de versión (Laravel 4.x vs Laravel 5.x). ¿Puede explicar cómo esto resolvería la pregunta?
Chris Forrence
Tenía el problema descrito anteriormente, así que activé el rizo y el problema se resolvió. Creo que el compositor o laravel usa esta extensión php para descargar los paquetes. En mi caso, no sería exactamente incompatible con los paquetes de laravel, solo sería una dificultad para el compositor descargar los paquetes.
Gideao