该错误源于Composer未在任何配置仓库中找到指定包名,主因是包名拼写错误(大小写、分隔符、vendor名)、包不存在、私仓未配置或配置不匹配。需按顺序检查包名格式、Packagist存在性、repositories配置、缓存及name字段一致性。

Composer install 或 require 报错 “The requested package could not be found”
这个错误不是网络或权限问题,而是 Composer 根本没在任何已配置的仓库里查到你写的包名——它连尝试下载都没开始。最常见原因就是包名写错了,比如大小写、分隔符、vendor 名拼错,或者压根不存在这个公开包。
检查顺序建议如下:
- 确认
composer.json里的"require"字段中包名格式是否为"vendor/name"(两个单词,用斜杠分隔),例如"monolog/monolog",不是"monolog"或"Monolog/Monolog" - 去 Packagist 网站手动搜索你写的完整包名,看是否真有这个条目;注意区分大小写和连字符(
laravel/framework≠laravel\framework) - 如果包是私有的(如 GitLab/GitHub 私仓),确保已在
composer.json中正确声明了"repositories",且该仓库支持 Composer 协议(含composer.json文件并可被访问) - 运行
composer clear-cache再试一次,避免本地缓存了过期的包索引
包名大小写敏感导致找不到包
Packagist 和 Composer 默认把 vendor 和 package 名都当作小写处理,但文件系统或 Git 仓库本身可能不敏感,导致开发时写错大小写却“看起来能跑”。一旦换到 Linux 环境或 CI 流水线,就会直接报这个错。
典型翻车场景:
- 写成
"PHPMailer/PHPMailer"→ 正确应为"phpmailer/phpmailer" - 写成
"GuzzleHttp/guzzle"→ 实际是"guzzlehttp/guzzle"(vendor 名全小写,package 名也是小写) - 使用 GitHub URL 直接 require 时路径写成
"https://github.com/MyOrg/MyRepo.git",但实际 repo 名是myrepo,而你写了MyRepo,Git 服务端可能重定向失败
require 的包实际是 VCS 仓库但没配 repositories
当你用 composer require "vendor/name:dev-main" 想拉一个尚未发布到 Packagist 的开发分支时,Composer 默认只查 Packagist,不会自动猜你指的是哪个 Git 地址。
必须显式告诉它源在哪:
- 在
composer.json的"repositories"数组里加一条类型为"vcs"的配置,例如:"repositories": [ { "type": "vcs", "url": "https://github.com/myorg/mypackage" } ] - 或者临时加:运行
composer config repositories.myrepo vcs https://github.com/myorg/mypackage,再require - 注意:VCS 仓库的根目录下必须有合法的
composer.json,且"name"字段要与你在require中写的完全一致(包括大小写)
公司内网私包,Packagist 不可见,但 composer install 仍报 not found
即使你已经配置了私仓,如果 composer.json 中的 "name" 和 "require" 中引用的不一致,或者私仓响应的 packages.json 没包含该版本,也会触发这个错误。
排查要点:
- 用
composer config --list | grep repositories确认私仓配置已生效 - 执行
composer show -p查看当前所有可用包列表,确认你的私包是否出现在里面 - 如果私仓基于 Satis/SatisPress/SatisGo,检查生成的
packages.json是否包含对应"name"和"version";常见问题是 tag 没打对,或composer.json里"version"字段写死了但没匹配上 - 加
-vvv参数重试(如composer install -vvv),看日志里到底请求了哪个 URL,返回了什么 HTTP 状态码
"name" 必须和 require 语句里一模一样——连多一个空格都不行。










