php Composer:安装软件包时出现允许的内存大小错误

blpfk2vs  于 2022-10-30  发布在  PHP
关注(0)|答案(4)|浏览(316)

当我运行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.

我的内存限制是128 M。https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors除了增加我的内存限制外,似乎没有提供太多的洞察力,但似乎128 M应该足够了?
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,我编辑了它,以改变内存限制1024 MB,并得到了同样的结果:“
已用尽允许的内存大小1610612736字节 *"。
奇怪的是,“允许的内存大小”在每个示例中都是完全相同的,好像我所做的一切实际上都没有改变内存大小。
有什么想法吗?

sbtkgmzw

sbtkgmzw1#

(可能是)Composer Update failed -- out of memory的副本

我在相同的版本(PHP 7.1、Composer 1.9.x)和完全相同的内存限制(经过调查,内存限制是在Composer中编码/定义的)中遇到了同样的问题。
遇到这种错误时,首先要告诉composer不要使用变量限制内存,如下所示:
composer require xxx
这是推荐的方式,但有时它只是不工作。
在我的项目中,似乎每次我执行composer require xxx时,composer.lock都会损坏。
为了“修复”它,我这样做:

  • 删除您的vendor文件夹(rm -fr vendor
  • 删除composer.lockrm composer.lock
  • 确保您的composer.json包含您的新需求(由于以前的composer require,它应该在那里),如果没有,添加它
  • 重新执行composer install

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

g52tjvyc

g52tjvyc2#

不要删除composer.lock,因为在前面的答案中建议的项目,这是催款的生产。此外,确保它确实存在,它有助于节省大量的资源和时间,避免重新计算依赖的composer +锁定库版本,使项目行为更可预测。
“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环境中的Docker容器内,请在那里重新配置您的虚拟机(选中Docker的首选项,您可以增加内存和CPU的数量,这可以由Docker分配-这是一个非常常见的问题:人们忘记了在OSX中有一个虚拟机正在运行以服务于Docker,因此默认情况下他们在CPU/MEM/磁盘分配方面有限制)
1.如果OSX上的Docker不是这种情况,并且主机的可用内存有真实的限制,则最好使用开发环境,该环境具有更多内存或为此目的添加交换空间。
1.根据我的观察,通常composer需要大部分的内存来重新计算所有的依赖项,找到平台的匹配版本,从远程仓库中获取哈希值,并将所有这些信息放入composer. lock。生成composer.lock后,它不需要太多的内存,因此安装可以在非常有限的内存中完美地工作。所以有时我使用了一种变通方法,喜欢(这是相当可怕的,并取决于运气,但有时工作):
a.运行composer require并等待新记录出现在composer.lock中,然后终止该进程(以避免composer.lock中的记录恢复,这在安装失败时自动发生)。如果幸运的话,您将在达到内存限制之前更新它。
B.然后运行composer install并最终安装库。
如果这些方法都不起作用,您可以尝试在composer.lock中手动添加记录,并使用适当的哈希值。在这种情况下,您可以避免重新计算所有依赖项,并立即跳转到安装过程。但这只是一个快速的胜利,稍后您将再次面临同样的问题(当下次您需要重新计算锁定文件时)。

b1zrtrql

b1zrtrql3#

我还得到了确切的1610612736 bytes exhausted错误,并通过运行以下命令修复了它:

COMPOSER_MEMORY_LIMIT=-1 php -d memory_limt=-1 $(which composer) install

如果不起作用,请尝试重命名composer.lock文件,然后重试。

zy1mlcev

zy1mlcev4#

第90行上的phar:///usr/local/bin/composer.phar/src/Composer/DependencyResolver/RuleSet.php中已用尽允许的1610612736字节内存大小(尝试分配83886080字节)

我用这个解决了这个
COMPOSER_MEMORY_LIMIT=-1编写器需要“数据包名称”

相关问题