GitHub Action中CentOS容器内运行pip报坏解释器错误如何解决?
问题原因
这个报错是shebang路径不匹配导致的:actions/setup-python 为GitHub托管运行器预编译的Python,默认的解释器路径为 /opt/hostedtoolcache/Python/[版本号]/x64/bin/python,pip脚本的shebang也会默认写死这个路径。当你指定任务在容器内运行时,运行器会把宿主机的toolcache目录挂载到容器的 /__t/ 路径下,容器内不存在 /opt/hostedtoolcache/ 这个路径,就会触发解释器找不到的错误。
可行解决方案
你可以选择以下任意一种方式修复:
- 方案1:放弃使用
actions/setup-python,直接在CentOS容器内安装原生Python
在安装依赖前新增步骤执行系统级安装:
后续所有pip操作都用yum install -y epel-release && yum install -y python3 python3-pippip3替代pip执行即可,完全避免路径冲突。 - 方案2:保留
actions/setup-python,调用pip时通过Python解释器加载模块
不要直接执行pip install,改成用当前环境的Python解释器调用pip模块:
这个方式会直接使用环境变量里匹配到的Python解释器,不会读取pip脚本的shebang,自然不会出现路径错误。python -m pip install -r test/requirements.txt - 方案3:手动添加软链接对齐路径
在执行pip安装前新增步骤,在容器内创建和宿主机一致的路径软链接:mkdir -p /opt/hostedtoolcache/Python/3.6.15/ && ln -s /__t/Python/3.6.15/x64 /opt/hostedtoolcache/Python/3.6.15/x64
额外提示
如果需要使用高于3.6版本的Python,CentOS 7官方源不提供支持,可以提前使用预装了高版本Python的CentOS镜像作为运行容器,省去环境配置的额外步骤。
内容的提问来源于stack exchange,提问作者Tudor Timi
相关产品推荐
相关产品推荐

