作曲家:安装软件包时

时间:2020-01-30 02:11:18

标签: php composer-php

当我运行composer require yab/laravel-scout-mysql-driver时,这是我得到的输出:

Using version ^2.40 for yab/laravel-scout-mysql-driver
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
PHP Fatal error:  Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/Cellar/composer/1.3.2/libexec/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52

Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/Cellar/composer/1.3.2/libexec/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52

Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.

我正在运行Composer 1.9.2。

这是我使用-vvv时输出的最后几行:

Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-ircmaxell$password-compat.json from cache
Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-paragonie$constant-time-encoding.json from cache
Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-yab$laravel-scout-mysql-driver.json from cache
Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-symfony$class-loader.json from cache
Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-symfony$polyfill-apcu.json from cache
Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-symfony$polyfill-xml.json from cache
Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-gecko-packages$gecko-php-unit.json from cache
PHP Fatal error:  Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/Cellar/composer/1.3.2/libexec/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52

Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/Cellar/composer/1.3.2/libexec/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52

Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.

我的内存限制为128M。 https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors除了增加内存限制外似乎没有提供很多见识,但看起来128M应该足够了吗?

php -d memory_limit=-1 /usr/local/bin/composer require yab/laravel-scout-mysql-driver没有帮助-我收到“ 已允许用完1610612736字节的内存大小”错误。与memory_limit=1024M相同。

我做了php --ini,并从中得到了/usr/local/etc/php/7.1/php.ini,我对其进行了修改以将内存限制更改为1024MB,并得到了相同的信息:“ 允许的内存大小为1610612736字节已耗尽”。

在每个实例中“允许的内存大小”完全相同是很奇怪的。就像我实际上没有在更改内存大小一样。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

复制Composer Update failed -- out of memory

相同版本(PHP 7.1,Composer 1.9.x)和完全相同(奇怪的)内存限制的问题。

对我来说,每次执行composer require xxx时composer.lock似乎都损坏了。

要“修复”它,我这样做:

  • 删除您的vendor文件夹(rm -fr vendor
  • 删除composer.lockrm composer.lock
  • 请确保您的composer.json包含您的新要求(由于先前的composer require而应包含在其中),否则请添加它。
  • 再做一次composer install

这时,您将清楚地看到依赖关系问题,或者将安装所有内容。

我成功完成了2次。

答案 1 :(得分:1)

请勿像在生产中催款的项目那样按照先前答案中的建议删除composer.lock。此外,确保它确实存在,这有助于节省大量资源和时间,从而避免通过作曲家重新计算依赖关系,并且锁定库版本使项目行为更可预测。

“ composer.lock”对于任何项目都是必须的,并且其删除有点类似于composer update。您可能会因为解锁而遇到麻烦,结果是将较新版本的库获取到项目中并进行了重大更改。在大多数情况下,在composer.json中,库版本不是太严格(人们通常将主版本放在库中,最好情况下是次要版本,而几乎从来没有补丁的版本),因此删除大型项目的composer.lock可能导致对于巨大的问题,它并没有真正的帮助,因为composer必须获取所有必需库的所有可能分支和版本,这些都在composer.json中定义,只是为了生成composer.lock。

您使用php -d memory_limit=-1 /usr/local/bin/composer require yab/laravel-scout-mysql-driver的解决方案是正确的,并且在大多数情况下都可以使用。在我看来,您的可用内存量有限。在这种情况下,您可以尝试执行以下操作之一:

  1. 如果您在OSX env的docker容器中,请在此处重新配置VM(检查docker的Preferences(首选项),然后可以增加可由docker分配的内存和CPU数量-这是一个非常普遍的问题:人们忘记了,在OSX中有一个正在运行的虚拟机为docker服务,因此默认情况下,它们在CPU / MEM /磁盘分配方面有限制)
  2. 如果不是OSX上的docker,并且主机对可用内存有实际限制,那么最好使用dev环境,该环境具有更多内存或为此目的添加交换。
  3. 根据我的观察,通常,作曲家需要精确地消耗大部分内存才能重新计算所有依赖项,找出平台的匹配版本,并从远程存储库中获取哈希值,并将所有这些信息放入composer.lock中。生成composer.lock之后,它不需要太多的内存,因此安装非常适合使用非常有限的内存。因此,有时我使用一种变通方法,例如(这非常糟糕,取决于运气,但有时可行):

    a。运行composer require并等待,直到composer.lock中出现新记录,然后终止该进程(以避免还原composer.lock中的记录,这会在安装失败时自动发生)。如果幸运的话,可以在达到内存限制之前对其进行更新。

    b。然后只需运行composer install并最终安装库。

如果所有方法均不起作用,则可以尝试使用适当的哈希在composer.lock中手动添加记录。在这种情况下,您可以避免重新计算所有依赖关系,并在中间跳入安装过程。但这只是一个快速的胜利,以后您将再次遇到相同的问题(下次需要重新计算锁定文件时)。

答案 2 :(得分:0)

我也遇到了确切的q错误,并通过运行以下命令进行了修复:

1610612736 bytes exhausted

如果这样不起作用,请尝试重命名COMPOSER_MEMORY_LIMIT=-1 php -d memory_limt=-1 $(which composer) install 文件,然后重试。