pip 20.X版本修改构建目录失败:TMPDIR未生效问题求助
问题背景与现象
我使用的是pip 20.X及以上版本,该版本的install命令已移除--build选项。由于Jenkins的/tmp清理插件偶尔会在安装中途清理/tmp目录,我需要修改pip的构建临时目录(请勿建议禁用该插件)。
根据文档说明,设置TMPDIR环境变量可指定构建目录,但启用verbose模式后,仍看到req-tracker和解压文件夹使用/tmp路径。我的操作脚本如下:
VENV=$(mktemp -d venv.XXXXXXX) python -m venv $VENV . $VENV/bin/activate export TMPDIR=$VENV/build python -m pip install --verbose -r requirements.txt
任务终止后,/tmp下仍生成了pip的临时文件夹:
$ lt /tmp/ total 116 drwx------ 47 dom.larosa dom.larosa 4096 Feb 17 06:54 pip-build-sx9op49f drwx------ 2 dom.larosa dom.larosa 4096 Feb 17 06:54 pip-3at9dsy4-record
而指定的$VENV/build目录不存在,也无任何内容:
$ lt $VENV/build ls: cannot access 'venv.WFWImFB/build': No such file or directory
问题原因
- 指定的临时目录未创建:pip不会自动创建
TMPDIR指向的目录,如果该目录不存在,pip会 fallback 到系统默认的/tmp目录。 - 部分临时文件受专属环境变量控制:req-tracker相关的临时文件并非完全由
TMPDIR控制,单独设置TMPDIR无法覆盖这部分文件的存储路径。
解决方法
修改脚本,先创建指定的临时目录,同时补充设置PIP_REQ_TRACKER环境变量,确保所有pip临时文件都存到目标路径:
VENV=$(mktemp -d venv.XXXXXXX) python -m venv $VENV . $VENV/bin/activate # 先创建目标临时目录,确保路径存在 mkdir -p $VENV/build # 设置TMPDIR控制通用临时文件 export TMPDIR=$VENV/build # 设置PIP_REQ_TRACKER控制req-tracker相关临时文件 export PIP_REQ_TRACKER=$VENV/build/pip-tracker python -m pip install --verbose -r requirements.txt
验证效果
运行修改后的脚本后,查看$VENV/build目录,会发现pip生成的所有临时文件夹(包括build目录、req-tracker目录)都存放在此处,/tmp下不会再生成相关的pip临时文件。
内容的提问来源于stack exchange,提问作者Dom LaRosa
相关产品推荐
相关产品推荐

