Domanda

Ho già il GeoIP2 Pacchetto installato. Quando l'ho installato qualche tempo fa, è necessario Guzzle 3. * Quindi ha installato Guzzle 3.9.1 come una delle sue dipendenze.

Ora voglio installare il predicitonio pacchetto, quindi l'ho aggiunto al mio compositore.json

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

Il problema è predizione richiede Guzzle 3.8.0 o 3.8.1, non lo farà Accetta la versione già installata 3.9.1.

Credo Guzzle 3.8.0 soddisferebbe entrambi geoip2 e predizione , quindi la domanda è come posso downgrade Guzzle , tenendo presente Guzzle non appare nel mio compositore.json, solo il compositore.lock.

Sotto è l'uscita quando eseguo 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].
.

È stato utile?

Soluzione

Non è necessario aggiungere Guzzle al composer.json.Tutto quello che devi fare è aggiornare il Guzzle quando aggiungi il nuovo pacchetto.(Questo sarà downgrade Guzzle per abbinare i requisiti predizionali)

Basta eseguire

composer update predictionio/predictionio guzzle/guzzle
.

Come puoi vedere, è possibile fornire più pacchetti a composer update separandoli con uno spazio.Questo è descritto in La documentazione .

Altri suggerimenti

Alcuni suggerimenti relativi alla domanda:

Eseguendo composer update named/package, consentono solo questo pacchetto di essere aggiunto o è aumentato la versione, ma nient'altro. Lo stesso (ma solo aggiungere roba) accadrà con composer require named/package:~1.0 (questo è un bel modo per aggiungere cose senza dover scherzare con la formattazione JSON).

La soluzione più semplice quando si aggiorna cose è eseguire solo composer update. Senza un nome di un pacchetto, tutti i pacchetti possono essere aggiornati.

Aggiornamento tutto potrebbe essere un po 'rischioso se non è stato attento con la selezione dei pacchetti software. Personalmente consiglio di utilizzare il software che in qualche modo sembra usare versione semantica, che consente molto bene di utilizzare il requisito della versione Tilde nel compositore. Direi che tutti dovrebbero provare a utilizzare ~X.Y come descrizione della versione, poiché ciò consente di installare entrambe le patch e gli aggiornamenti compatibili.

Librerie che usi dovrebbero consentire abbastanza versioni definite per le loro dipendenze. Nell'esempio, il pacchetto predictionio/predictionio richiede guzzle/guzzle:~3.8.0: probabilmente hanno ragioni per farlo, ma a sua volta costringono tutti quelli che tentano di utilizzare il loro software per utilizzare Guzzle 3.8.0 o 3.8.1. Dubito che i manutentori dei Guzzle rompano la compatibilità all'indietro, perché sanno che creano un pezzo di software molto importante e di base che dovrebbe funzionare, e penso che riceveranno segnalazioni di bug piuttosto presto dovrebbero rompere la roba comunque. Mi piacerebbe molto vedere le dipendenze di qualsiasi biblioteca per consentire aggiornamenti compatibili senza restrizioni, cioè in questo caso ~3.8 sarebbe molto meglio.

Evitare a seconda dei rami a tutti i costi. Se è inevitabile utilizzare un ramo, assegnarlo un numero di versione alias: require: { "named/package": "dev-master as 1.2.2" } Se nessun numero di versione appropriato può essere indovinato dalle uscite precedenti, iniziano con 0.0.0. In questo modo è possibile passare a una versione rilasciata in seguito, il che si integrerà meglio nel resto dei numeri di versione.

Se si desidera installare una versione specifica di un pacchetto, puoi semplicemente aggiungere questo al tuo compositore.json in richiedi sezione:

    "guzzle/guzzle" : "3.8.0",
.

e poi

  composer update guzzle/guzzle
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top