Как я могу только обновить зависимость одного композитора?
Я ожидал, что
composer update videlalvaro/php-amqplib
будет обновлять только одну зависимость, но вместо этого она обновляет все.
Что мне не хватает?
PS: эта зависимость определяется как "videlalvaro/php-amqplib": "2.2.0"
в composer.json
PPS: используется версия композитора 3da05c68f9561fa822c522b1815435ff990493ff 2013-10-02 14:25:06
PPPS: фактический вывод:
$ composer.phar update videlalvaro/php-amqplib --no-dev
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
- symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
- Installation request for symfony/icu == 1.2.0.0 -> satisfiable by symfony/icu[v1.2.0].
Ответы
Ответ 1
Команда composer update videlalvaro/php-amqplib
просто обновляет эту зависимость. Однако это не отключает проверку других зависимостей, выполняемых Composer.
О чем сообщается сообщение об ошибке, является то, что lib-icu недоступен в вашей системе. По-видимому, это было бы решено путем установки расширения PHP Intl.
Вы бы увидели похожие проблемы, если бы вы выполнили обновление композитора в проекте, для которого требуется, чтобы PHP 5.5 в одном из них требовался, с понижением до PHP 5.4, а затем выполнял обновление компоновщика по отдельному требованию, что не требовало PHP 5.5. Несмотря на то, что вы не будете обновлять требования, требующие PHP 5.5, требования к этому пакету не будут разрешимы, и поэтому Composer завершится с ошибкой.
В вашем случае, даже если вы просто пытаетесь обновить videlalvaro/php-amqplib
до последней версии, требования для symfony/icu
не выполняются, поэтому обновление композитора не выполняется.
Edit
Чтобы попытаться быть полезным, я предполагаю, что вы повторно установили PHP с момента последнего обновления, и либо удалили, либо забыли установить расширение PHP Intl. Композитор не может удовлетворительно удовлетворять требованиям, которые устанавливает ваш composer.json, и поэтому не выполняет ничего, а не сознательно выполняет обновление, где требования не выполняются.
В принципе, вам нужно установить расширения PHP, необходимые для запуска вашего установленного программного обеспечения, а затем Composer сможет обновить один пакет, который вы хотите обновить, а также выполнить требования к другим пакетам.
Ответ 2
ТЛ; др:
Вы можете перечислить более чем одну зависимость для обновления в одной команде:
composer update one/dependency second/dependency other/dependency
История:
Если вы хотите обновить только одну зависимость (composer update some/dependency
), вы можете столкнуться с проблемой, что запрос не является выполнимым из-за того, что какая-либо другая зависимость установлена в неправильной версии. И это необязательно должно быть указано в вашем composer.json
, это может быть просто зависимость от какой-либо другой зависимости.
например. Я хотел только обновить и только google/apiclient
, но вызов composer update google/apiclient
жаловался, что google/auth
(зависимость apiclient) требует guzzlehttp/psr7
в версии 1.2.3
. Я установил 1.3.0
. guzzlehttp/psr7
не указан в моем composer.json
. Я должен был позвонить:
composer update guzzlehttp/psr7 google/apiclient
и что это! Просто обновите требуемый пакет, и если композитор скажет вам, что вам нужно обновить (или понизить:-)) другой пакет, перечислите его в команде.