Ubuntu EC2上Docker容器运行Web应用时libctransformers.so缺失求助
问题解决方案
1. 排查ctransformers安装完整性
首先在Docker构建阶段添加检查步骤,确认包是否正确安装:
FROM python:3.10 WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt --default-timeout=100 future && \ # 检查ctransformers安装信息及文件 pip show ctransformers && \ ls -la /usr/local/lib/python3.10/site-packages/ctransformers/lib/basic/ COPY . . EXPOSE 8000 CMD ["chainlit", "run", "model.py"]
重新构建镜像时查看输出,如果构建阶段就提示文件缺失,说明ctransformers安装不完整。
2. 指定适配平台的ctransformers版本
ctransformers依赖预编译二进制文件,默认安装可能存在平台适配问题。在requirements.txt中明确指定兼容Linux x86_64的版本:
ctransformers==0.2.27 --extra-index-url https://wheels.mrpt.org/simple/
若预编译包仍无法适配,可尝试源码编译(需先安装编译依赖):
FROM python:3.10 WORKDIR /app # 安装编译依赖 RUN apt-get update && apt-get install -y gcc g++ make cmake COPY requirements.txt . # 强制从源码编译ctransformers RUN pip install -r requirements.txt --default-timeout=100 future --no-binary :all: ctransformers COPY . . EXPOSE 8000 CMD ["chainlit", "run", "model.py"]
3. 修正路径认知偏差
Python官方镜像中,pip安装的包默认存放在/usr/local/lib/python3.10/site-packages/,你看到的dist-packages是系统Python的路径。进入容器执行以下命令,确认ctransformers实际安装路径:
docker exec -it <容器ID> bash -c "pip show ctransformers | grep Location"
如果代码中硬编码了错误路径,需要同步修改代码中的引用逻辑。
4. 清理缓存重新构建
Docker缓存可能导致旧的安装状态残留,执行以下命令强制重新构建:
docker build --no-cache -t <你的镜像名> .
内容的提问来源于stack exchange,提问作者frank_909
相关产品推荐
相关产品推荐

