从ubuntu docker镜像中删除perl会导致pyodbc失败



在尝试使用python和pyodbc准备基于ubuntu 20.04的映像时遇到预期问题。

FROM ubuntu:20.04
# install mssql odbc driver
RUN apt-get update && apt-get upgrade -y && apt-get install -y curl gnupg build-essential
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - 
&& curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql17 unixodbc-dev
# install python 3.7.9 from source
RUN apt-get install -y python3 python3-pip
# clean up
# this does not work
RUN apt-get remove -y perl curl gnupg && apt-get autoremove -y
# this works
# RUN apt-get remove -y curl gnupg && apt-get autoremove -y
RUN pip3 install pyodbc

如果没有删除perl,则pyodbc的安装是正常的,但如果删除了perl,将显示以下错误:

src/pyodbc.h:56:10: fatal error: sql.h: No such file or directory

就好像unixodbc-dev也因为某种原因被删除了一样。以前有人碰到过这个吗?如果perl是必需的,apt-get难道不会阻止它被删除吗?或者我需要安装一组不同的c绑定来实现这一点。

同样,在安装msodbcsql17之后运行apt-get install -f也没有帮助。

谢谢。

unixodbc-dev是作为可传递依赖项安装的,在不再需要时(即删除perl后(会自动删除。你需要明确地安装它:

RUN apt-get install -y unixodbc-dev

有关详细信息,请参阅以下错误报告:https://github.com/mkleehammer/pyodbc/issues/441

最新更新