Swoole 是 C 扩展,不能通过 Composer 安装;必须先用 pecl 或源码编译安装扩展并启用,再通过 composer require swoole/library(可选)引入 PHP 绑定层,且需在 composer.json 中用 "ext-swoole": "*" 声明依赖以校验扩展是否已加载。

composer install swoole 会失败,因为 Swoole 不是纯 PHP 包
直接运行 composer require swoole 会报错,典型提示是 Could not find package swoole/swoole 或 Package swoole/swoole has a PHP requirement incompatible with your PHP version。这不是你配错了源或网络问题,而是根本性误解:Swoole 是 C 扩展,不是 Composer 能自动下载安装的 PHP 类库。
Composer 只能管理通过 autoload 加载的 PHP 代码,而 Swoole 必须先编译进 PHP 解释器,才能被 extension= 加载。所以“用 Composer 安装 Swoole”这个说法本身就不成立——它只能帮你装 Swoole 的 PHP 绑定层(比如 swoole/library),但核心扩展必须手动装。
真正要做的:先装扩展,再装 PHP SDK 包(可选)
如果你需要在项目中使用 Swoole 提供的类(如 Swoole\Http\Server),前提是 PHP 已加载 swoole 扩展。否则哪怕 Composer 装了 swoole/library,运行时也会报 Class 'Swoole\Http\Server' not found。
- Linux/macOS:用
pecl install swoole,或从源码编译(推荐匹配 PHP 版本) - Windows:仅支持 PHP 7.4–8.2 的线程安全(TS)版,需下载预编译 DLL 并配置
php.ini中的extension=php_swoole.dll - 装完后务必运行
php -m | grep swoole确认已启用 - 如果项目里用了
swoole/library(比如为了类型提示或兼容旧写法),可以composer require swoole/library,但它不提供任何运行时能力
composer.json 里写 "ext-swoole": "*" 是给谁看的?
这个字段不是让 Composer 去装扩展,而是声明“我这项目依赖 Swoole 扩展存在”。它的作用是:composer install 时检查当前 PHP 是否已加载 swoole,没加载就报错并中断。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
立即学习“PHP免费学习笔记(深入)”;
它属于 require 下的平台扩展约束,类似 "ext-curl": "*"。常见误用是以为加了它就能自动触发安装——不会。它只校验,不安装。
- 正确写法:
"require": { "php": ">=8.0", "ext-swoole": "*" } - 注意版本号要和实际安装的 Swoole 扩展一致,比如 Swoole v5.1.3 对应
"ext-swoole": "^5.1",否则校验失败 - CI/CD 流水线里加这一条,能早发现环境缺失,比运行时报
Class not found更早暴露问题
为什么有些项目 composer require 成功了?
那大概率装的是 hyperf/swoole、easy-swoole/easy-swoole 这类框架,或者 swoole/ide-helper 这种纯 PHP 工具包。它们本身不提供 Swoole 扩展,只是基于扩展做封装。
这类包的 composer.json 通常同时声明了 ext-swoole 和 swoole/library,看起来“一气呵成”,但底层仍依赖你提前装好扩展。跳过这步,框架启动时照样崩。
- Hyperf 启动报
SWOOLE_VERSION is not defined→ 扩展没加载 - EasySwoole 报
Call to undefined function Swoole\Coroutine\run()→ 扩展版本太低或未启用 - IDE 提示正常、运行报错 → 很可能是只装了
swoole/library,漏了扩展


















