Composer два пакета, конфликтующие по версии зависимости

StackOverflow https://stackoverflow.com//questions/25055161

  •  21-12-2019
  •  | 
  •  

Вопрос

у меня уже есть геоIP2 пакет установлен.Когда я установил его некоторое время назад, ему потребовалась версия guzzle 3.*, поэтому он установил guzzle 3.9.1 в качестве одной из своих зависимостей.

Теперь я хочу установить предсказание пакет, поэтому я добавил его в свой композитор.json

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

Проблема в том, предсказание требуется guzzle 3.8.0 или 3.8.1, он не примет уже установленную версию 3.9.1.

Я считаю жрать 3.8.0 удовлетворит обоих геоIP2 и предсказание, поэтому вопрос в том, как я могу понизить версию жрать, имея в виду жрать не отображается в моем композиторе.json, только в композиторе.lock.

Ниже приведен результат, когда я запускаю 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].
Это было полезно?

Решение

Вам не нужно добавлять дондую к вашему генеракодичениюCode.Все, что вам нужно сделать, это обновление доживания при добавлении нового пакета.(Это будет передавать донду, чтобы соответствовать требованиям предсказываний)

Просто запустить

composer update predictionio/predictionio guzzle/guzzle
.

Как видите, вы можете предоставить несколько пакетов для composer.json, отделяя их пространством.Это описано в Документация .

Другие советы

Некоторые подсказки, связанные с вопросом:

Запустив composer update named/package, вы разрешаете только добавление этого пакета или увеличение его версии, но ничего больше.То же самое (но только с добавлением материала) произойдет с composer require named/package:~1.0 (это хороший способ добавить что-нибудь, не заморачиваясь с форматированием json).

Самое простое решение при обновлении — запустить только composer update.Без имени пакета ВСЕ пакеты могут быть обновлены.

Обновление всего может быть немного рискованным, если вы не будете осторожны с выбором пакетов программного обеспечения.Лично я рекомендую использовать программное обеспечение, которое каким-то образом использует семантическое управление версиями, что очень удобно позволяет использовать требование версии тильды в Composer.Я бы сказал, что каждый должен попробовать использовать ~X.Y в качестве описания версии, поскольку это позволяет устанавливать как исправления, так и совместимые обновления.

Библиотеки, которые вы используете, должны допускать достаточно свободно определенные версии ИХ зависимостей.В вашем примере predictionio/predictionio пакет требует guzzle/guzzle:~3.8.0 - у них, вероятно, есть причины для этого, но, в свою очередь, они заставляют всех, кто пытается использовать их программное обеспечение, использовать Guzzle 3.8.0 или 3.8.1.Я сомневаюсь, что сопровождающие Guzzle нарушат обратную совместимость, потому что они знают, что создают очень важную, базовую часть программного обеспечения, которая, как ожидается, будет работать, и я думаю, что они довольно скоро получат отчеты об ошибках, если они, тем не менее, что-то сломают.Мне бы очень хотелось увидеть зависимости любой библиотеки, позволяющие осуществлять совместимые обновления без ограничений, т.е.в этом случае ~3.8 было бы гораздо лучше.

Любой ценой избегайте зависимости от филиалов.Если использование ветки неизбежно, присвойте ей псевдоним номера версии: require: { "named/package": "dev-master as 1.2.2" } Если из более ранних выпусков невозможно угадать правильный номер версии, начните с 0.0.0.Таким образом, вы сможете позже переключиться на выпущенную версию, которая будет лучше интегрироваться с остальными номерами версий.

Если вы хотите установить определенную версию пакета, вы можете просто добавить это в свой Composer.json в разделе :

    "guzzle/guzzle" : "3.8.0",
.

а затем

  composer update guzzle/guzzle
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top