【问题标题】:What docker image should I pull to be able to install pyodbc and pythonnet?我应该拉什么 docker 镜像才能安装 pyodbc 和 pythonnet?
【发布时间】:2021-03-03 14:06:29
【问题描述】:

我正在尝试对以前部署在 Windows 上的应用程序进行 docker 化,我想知道应该使用什么 python 映像来解决安装 pyodbc 和 pythonnet 的问题。我的要求:

pyodbc==4.0.25 pythonnet==2.4.0

我得到的 pyodbc 错误状态:

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

pythonnet 错误: 没有为 pythonnet==2.4.0 找到匹配的分布

我的 Dockerfile 如下所示:

FROM python:3.6
WORKDIR /opt

# create a virtual environment and add it to PATH so that it is applied for all subsequent run and cmd calls
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

COPY requirements.txt 
COPY src ./src

RUN pip install --no-cache-dir -r requirements.txt
cmd python src/automation/interface/app.py

我尝试拉取一个 windows-server-core 映像,但收到一条错误消息,提示找不到该映像,并且我无法找到任何其他正常运行的基于 Windows 的映像。我需要解决这个问题,因为我的应用程序构建并导入了一个 c# 应用程序,我需要 pythonnet 才能做到这一点。 任何帮助将不胜感激。

【问题讨论】:

    标签: python docker pyodbc python.net


    【解决方案1】:

    这是一个你可以使用的 Dockerfile

    FROM python:3.6
    WORKDIR /opt
    
    # Install Mono for pythonnet.
    RUN apt-get update \
        && apt-get install --yes \
            apt-transport-https \
            dirmngr \
            clang \
            gnupg \
            ca-certificates \
            # Dependency for pyodbc.
            unixodbc-dev \
        && apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF \
        && echo "deb http://download.mono-project.com/repo/debian stretch/snapshots/5.20 main" | tee /etc/apt/sources.list.d/mono-official-stable.list \
        && apt-get update \
        && apt-get install --yes \
            # https://github.com/pythonnet/pythonnet/issues/939#issuecomment-520904067
            # https://github.com/jonemo/pythonnet-docker/blob/master/_dockerfiles/python3.6.10-mono5.20-pythonnet2.5.0
            mono-devel=5.20\* \
        && rm -rf /var/lib/apt/lists/*
    
    # create a virtual environment and add it to PATH so that it is applied for all subsequent run and cmd calls
    ENV VIRTUAL_ENV=/opt/venv
    ENV PATH="$VIRTUAL_ENV/bin:$PATH"
    RUN python3 -m venv $VIRTUAL_ENV \
        # From here on, use virtual env's python.
        && python -m pip install --no-cache-dir --upgrade pip setuptools wheel \
        # Dependency for pythonnet.
        && python -m pip install --no-cache-dir pycparser \
        && python -m pip install --no-cache-dir "pyodbc==4.0.25" "pythonnet==2.4.0"
    

    这个 Dockerfile 安装 Mono 运行时,这似乎是 linux 上的 pythonnet 所必需的。它还通过安装unixodbc-dev 解决了丢失的sql.h 文件(参见mkleehammer/pyodbc#441)。

    【讨论】:

    • 我正在尝试安装 pyodbc 而不是 pyobjc。在下载了一些额外的驱动程序后,我设法安装了它。至于你回答的第二部分,我不确定我是否可以使用它;我正在尝试 pip install python net,而不是部署其他容器。
    • 谢谢,但是为什么github的url被注释掉了?
    • @Boris 第一个被注释掉的 url 实际上只是解释为什么你可能必须使用 Mono 5.20 的注释。我认为我们在 pythonnet 2.5 中修复了 6.0 的相应问题
    • 是的,我将这些链接作为 cmets 包含在内,以指向有关 pythonnet 和单声道版本 5.20.x 的讨论。 @LOST - 请随时提交修改我包含的 dockerfile 的不同答案
    • @jakub 我仍然收到一条错误消息,提示“pythonnet 构建轮子失败”。你自己测试过这段代码吗?
    猜你喜欢
    • 1970-01-01
    • 2022-11-09
    • 2022-11-18
    • 2012-12-08
    • 2017-06-22
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多