Pregunta

ya tengo el geoip2 paquete instalado.Cuando lo instalé hace algún tiempo, requería guzzle 3.* así que instalé guzzle 3.9.1 como una de sus dependencias.

Ahora quiero instalar el predicción paquete, así que lo agregué a mi compositor.json

"require": {
    ...
    ...
    "geoip2/geoip2": "0.6.*",
    "predictionio/predictionio": "~0.7.1"
}

El problema es predicción requiere guzzle 3.8.0 o 3.8.1, no aceptará la versión 3.9.1 ya instalada.

Yo creo engullir 3.8.0 satisfaría ambos geoip2 y predicción, entonces la pregunta es ¿cómo puedo bajar la categoría? engullir, teniendo en cuenta engullir no aparece en mi compositor.json, solo el compositor.lock.

A continuación se muestra el resultado cuando ejecuto composer update predictionio/predictionio

  Problem 1
    - Installation request for predictionio/predictionio ~0.7.1 -> satisfiable by predictionio/predictionio[v0.7.1].
    - Conclusion: remove guzzle/guzzle v3.9.1
    - predictionio/predictionio v0.7.1 requires guzzle/guzzle ~3.8.0 -> satisfiable by guzzle/guzzle[v3.8.0, v3.8.1].
    - Can only install one of: guzzle/guzzle[v3.9.1, v3.8.0].
    - Can only install one of: guzzle/guzzle[v3.9.1, v3.8.1].
    - Installation request for guzzle/guzzle == 3.9.1.0 -> satisfiable by guzzle/guzzle[v3.9.1].
¿Fue útil?

Solución

No necesitas agregar Guzzle a tu composer.json.Todo lo que tienes que hacer es actualizar Guzzle cuando agregas el nuevo paquete.(Esto degradará Guzzle para que coincida con los requisitos de PredictionIO)

Simplemente ejecuta

composer update predictionio/predictionio guzzle/guzzle

Como puede ver, puede proporcionar varios paquetes para composer update separándolos con un espacio.Esto se describe en la documentación.

Otros consejos

Algunas sugerencias relacionadas con la pregunta:

Mediante la ejecución composer update named/package, solo permites agregar este paquete o aumentar su versión, pero nada más.Lo mismo (pero solo agregando cosas) sucederá con composer require named/package:~1.0 (Esta es una buena manera de agregar cosas sin tener que alterar el formato json).

La solución más sencilla a la hora de actualizar cosas es ejecutar únicamente composer update.Sin un nombre de paquete, TODOS los paquetes pueden actualizarse.

Actualizar todo puede ser un poco arriesgado si no tiene cuidado al seleccionar sus paquetes de software.Personalmente, recomiendo usar software que de alguna manera parezca usar versiones semánticas, lo que muy bien permite usar el requisito de versión de tilde en Composer.Yo diría que todo el mundo debería intentar utilizar ~X.Y como descripción de la versión, porque esto permite instalar tanto parches como actualizaciones compatibles.

Las bibliotecas que utilice deben permitir versiones suficientemente definidas de SUS dependencias.En su ejemplo, el predictionio/predictionio el paquete requiere guzzle/guzzle:~3.8.0 - Probablemente tengan razones para hacerlo, pero a su vez obligan a todos los que intentan utilizar su software a utilizar Guzzle 3.8.0 o 3.8.1.Dudo que los mantenedores de Guzzle rompan la compatibilidad con versiones anteriores, porque saben que crean una pieza de software básica muy importante que se espera que funcione, y creo que recibirán informes de errores muy pronto si, de todos modos, rompen cosas.Me gustaría mucho ver las dependencias de cualquier biblioteca para permitir actualizaciones compatibles sin restricciones, es decir.en este caso ~3.8 Sería mucho mejor.

Evita a toda costa depender de sucursales.Si es inevitable utilizar una rama, asígnele un número de versión de alias: require: { "named/package": "dev-master as 1.2.2" } Si no se puede adivinar el número de versión adecuado de versiones anteriores, comience con 0.0.0.De esa manera podrás cambiar a una versión lanzada más adelante, que se integrará mejor con el resto de números de versión.

Si desea instalar una versión específica de un paquete, simplemente puede agregar esto a su compositor.json en la sección Requerir :

    "guzzle/guzzle" : "3.8.0",

y luego

  composer update guzzle/guzzle

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top