我编写 Laravel 代码已经有一段时间了。目前,我尝试从 github 克隆一个项目并在本地进行编辑。我在项目目录中安装了 Composer,但未包含供应商文件夹,我尝试运行
composer install
但出现此错误
Your lock file does not contain a compatible set of packages. Please run composer update
我该如何解决这个问题?
注意:我尝试在以前的克隆上运行
composer update
,但没有成功。
免责声明,此解决方案不会解决 PHP 8 项目的问题。
在大多数情况下,这是由于 PHP 8 导致的(在我的例子中,GitHub CI 操作自动使用 PHP 8 启动,即使我的项目是 php 7.4)
如果您安装了多个 PHP(例如,同一服务器上的 7.4 和 8),可以通过以下方法修复它。
在你的composer.json文件中指定你的php版本
"config": {
"platform": {
"php": "7.3"
}
},
如果您已经提交了锁定文件,请在将以上行添加到composer.json后运行composer update,然后提交新的锁定文件。 (请注意,composer 更新会将您的软件包升级到最新版本)
我用这个命令解决了这个问题:
composer self-update --1
它可能有效,因为在项目开发时,作曲家使用的是另一个版本,当将主要版本从 1 更改为 2 时,兼容性被破坏。使用此命令,您可以降级 Composer,并且可能会解决这个问题
您应该尝试运行
composer update --lock
这将更新所有包并重新创建 compose.lock 文件。
您可以删除composer.lock文件并运行
composer install
,这也将重新创建.lock文件。
这解决了我的问题。
我在尝试部署 Laravel 应用程序时遇到了 Github Actions 错误,这可能与 OP 的情况不同,但没有一个建议对我有用。在这里添加我的答案,以防万一其他人遇到与我类似的问题。
我必须在 Github Actions 中禁用
-q
,然后看到它抱怨未安装扩展。
确保 Composer 的 php 扩展的
require
部分与 extensions:
的 github 操作文件中的 shivammathur/setup-php@v2
相匹配,它将再次部署
就我而言,这个问题发生在 Ubuntu 20.04 桌面上。这是由于一些包裹丢失造成的。
我运行了以下命令来安装一些软件包,然后重新运行 Composer install 并使其正常工作。命令是:
sudo apt-get install php-mbstring
sudo apt-get install php-xml
然后重新运行composer install
我在使用 Composer 部署另一个项目时遇到了同样的错误,但问题是缺少 php 扩展。
我知道您解决了问题,但对于看到相同错误消息的任何人,这里有一般指导:
在composer安装的依赖解决步骤中,每次出现冲突时都会显示错误消息
Your lock file does not contain a compatible set of packages. Please run composer update
。 (参见composer源代码中的相关部分)
它并没有告知真正的问题,而且可能很难猜测。
要获得确切的解释,您可以将
--verbose
选项添加到 composer install
命令(该选项可用于任何作曲家命令(请参阅文档)):composer install --verbose
它将向您提供完整的消息,解释到底是什么阻止了 Composer 安装完成(软件包版本冲突、缺少 php 扩展等),然后您就可以解决问题。
希望这能有所帮助。
最近,当我尝试运行我的 Laravel 7 项目时,我刚刚遇到了这个错误,该项目需要 php v7.* 和 php v8。由于我忘记了我的 php 版本,我只是尝试了一堆 Composer 命令,但错误不断。
无论如何,要解决这个问题,只需根据需要降级/升级 php 版本即可。只需在 youtube 中搜索如何执行此操作即可。 你可以在
composer.json
文件中看到你的项目所需的 php 版本(如果你想知道的话)
你也可以尝试以下方式(虽然它对我不起作用,但似乎对很多人有帮助)
-- 打开
composer.json
文件并将 php 版本更改为如下所示: "php": "^7.3|^8.1"
-- 然后运行
composer update
我在 garuda linux(基于 arch)中的 cakephp 项目遇到了这个问题
sudo pacman -S php-intl
/etc/php/php.ini
)。
添加 extension=intl
或取消注释现有的