唯一安全写法是composer config --global cache-dir,必须用绝对路径;手动改配置或设环境变量易因json错误或波浪号~导致静默失效,且composer.json中cache-dir字段完全无效。

composer config --global cache-dir 是唯一安全写法
直接改 ~/.composer/config.json 或手写环境变量,90% 会出错——JSON 格式错一个逗号、引号没闭合、路径含波浪号 ~,Composer 就静默跳过整个配置,后续命令行为异常但不报错。必须用命令写入:composer config --global cache-dir /path/to/cache。它自动处理 JSON 序列化、路径转义和作用域隔离,不碰其他字段。
- 路径必须是绝对路径,
~不被解析,得写成/home/alex/composer-cache,不能写~/composer-cache - 目录需提前创建:
mkdir -p /home/alex/composer-cache - 当前用户必须有读写权限:
chown -R $USER:$USER /home/alex/composer-cache - 改完后旧缓存不会迁移,要手动
rsync -a ~/.composer/cache/ /home/alex/composer-cache/或清空重下
COMPOSER_CACHE_DIR 环境变量优先级最高
它比全局 cache-dir 配置优先级更高,进程退出即失效,适合 CI/Docker 单次构建场景。但它不是“配置文件设置”,而是运行时覆盖,且极易因路径或权限问题静默失败。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 必须用绝对路径:
export COMPOSER_CACHE_DIR="/tmp/composer-cache" - 必须先
mkdir -p /tmp/composer-cache,否则 Composer 静默 fallback 到默认路径 - 在 Docker 中若以
root启动但挂载目录属普通用户,会因权限不足写失败,同样静默回退 - 验证是否真生效:运行
composer diag,看Cache directory:行输出,再ls -lh $(composer diag | grep "Cache directory" | cut -d' ' -f3)确认有新文件生成
composer.json 里配 "cache-dir" 完全无效
composer.json 中的 "config": {"cache-dir": "/xxx"} 字段对缓存路径毫无影响。这个字段只被 composer config 命令读取,install、update 等核心命令完全忽略它。
- 常见误解来源:看到文档里有
config字段就以为能控制缓存,其实它只影响vendor-dir、bin-dir等少数项目级行为 - 真正起作用的缓存路径由以下顺序决定:
COMPOSER_CACHE_DIR> 全局cache-dir配置 > 默认路径 - 如果在项目里硬写
cache-dir,反而容易导致协作时路径不一致,且无法跨项目复用缓存
验证是否真生效,别信配置输出值
composer config --global cache-dir 只显示配置项内容,不反映真实行为。真正决定路径的是 composer diag 输出的 Cache directory: 行——它已综合了环境变量、配置文件、默认逻辑。
- 如果
composer diag显示/root/.composer/cache但你在普通用户下执行,说明COMPOSER_HOME未设或被污染(比如之前用sudo composer) - 如果显示
/dev/null或空行,说明缓存被禁用(例如cache-read-only为 true 且无读取权限) - 路径末尾带
/repo/或/files/?那是子目录,Cache directory:显示的是主缓存根目录 - 最易被忽略的一点:即使
diag显示路径正确,也得进磁盘确认文件是否真写进去了——权限或路径合法性失败时,Composer 既不报错也不提示,只默默退回去用默认位置










