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

标签 python docker ubuntu 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 绑定(bind)来完成这项工作。
也在运行apt-get install -f安装 msodbcsql17 后也无济于事。
谢谢。

最佳答案

unixodbc-dev被安装为传递依赖,并在不再需要时自动删除,即在删除 perl 之后。您需要明确安装它:

RUN apt-get install -y unixodbc-dev
有关详细信息,请参阅以下错误报告:https://github.com/mkleehammer/pyodbc/issues/441

关于python - 从 ubuntu docker 镜像中删除 perl 会导致 pyodbc 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64507355/

相关文章:

docker - 为什么需要 Docker 多架构(而不是 Docker 引擎抽象差异)

postgresql - 我在本地计算机上收到 “docker: invalid reference format.”

c - 不会创建简单的文本文件 [C,GCC]

python - 在 Python 3 中调用 gnome 终端子进程时出现 "Failed to execute child process (No such file or directory)"

python - 如何减少类似的if语句python?

python - 如果大于RAM,则转换Dask数据帧

python - 降低图像分辨率

docker - 我们如何在 Cassandra Dockerfile 中运行 flyway/migrations 脚本?

c++ - G++编译,mac os和ubuntu的区别

C:打开第二个自定义大小的终端并将其用于输出