0

Как обновить только одну зависимость в Composer?

12

Проблема с обновлением зависимости в Composer

Я ожидал, что команда

composer update videlalvaro/php-amqplib

обновит только одну зависимость, но вместо этого она обновляет все зависимости.

Что я упускаю?

P.S.: Эта зависимость в моем файле composer.json определена как "videlalvaro/php-amqplib": "2.2.0".

P.P.S.: Используемая версия Composer: 3da05c68f9561fa822c522b1815435ff990493ff 2013-10-02 14:25:06.

P.P.P.S.: Вот актуальный вывод команды:

$ 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].

Как я могу решить эту проблему и обновить только указанную зависимость?

4 ответ(ов)

0

Команда composer update videlalvaro/php-amqplib обновляет только эту зависимость. Однако она не отключает проверку зависимостей, которую выполняет Composer.

Ошибка, о которой идет речь, связана с отсутствием библиотеки lib-icu в вашей системе. По всей видимости, это можно решить, установив расширение PHP Intl.

Вы столкнетесь с подобными проблемами, если выполните composer update в проекте, который требует PHP 5.5 в одном из его зависимостей, затем понизите версию PHP до 5.4 и проведете composer update у другой зависимости, которая не требует PHP 5.5. Хотя вы не обновляете зависимость, нуждающуюся в PHP 5.5, требования для этого пакета не смогут быть разрешены, и Composer завершит работу с ошибкой.

В вашем случае, несмотря на то что вы пытаетесь обновить только videlalvaro/php-amqplib до последней версии, не выполнены требования для symfony/icu, и, следовательно, обновление не удается.

Правка

Чтобы помочь вам, я предполагаю, что вы переустановили PHP с момента последнего обновления и либо удалили, либо забыли установить расширение PHP Intl. Composer не может удовлетворить требования вашего composer.json, поэтому он по умолчанию не выполняет никаких действий, вместо того чтобы сознательно проводить обновление, когда требования не выполнены.

В общем, вам нужно установить необходимые расширения PHP, чтобы ваше существующее программное обеспечение могло работать, и тогда Composer сможет обновить именно тот пакет, который вы хотите, а также удовлетворить требования для других пакетов.

0

кратко:

Вы можете обновить более одной зависимости в одной команде:

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

И всё! Просто обновите нужный пакет, и если composer сообщает вам, что нужно обновить (или понизить 😃) какую-то другую зависимость, укажите её в команде.

0

Чтобы избежать проблемы с зависимостями при обновлении конкретного пакета, вам следует заранее указать версии всех необходимых пакетов перед тем, как выполнять их обновление.

В вашем случае можно сделать следующее:

composer require videlalvaro/php-amqplib:2.2.0 --no-update
composer require symfony/icu:1.2.0 --no-update
composer require lib-icu:4.4 --no-update

composer update videlalvaro/php-amqplib symfony/icu lib-icu

Таким образом, вы сможете успешно обновить нужные пакеты, не сталкиваясь с проблемами зависимостей.

0

У меня была похожая ситуация по причинам безопасности на репозитории GitHub.

Я решил проблему, обновив зависимость до конкретной версии следующим образом:

composer require phpseclib/phpseclib:2.0.31

Если вы работаете с виртуальными окружениями, такими как контейнеры Docker (например, ddev, lando и т.д.), перед выполнением этой команды вам нужно подключиться к контейнеру с помощью:

ddev ssh
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь