python - 我应该拉什么 docker 镜像才能安装 pyodbc 和 pythonnet?
问题描述
我正在尝试对以前部署在 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 的映像。我需要解决这个问题,因为我的应用程序构建和导入 ac# 应用程序,我需要 pythonnet 才能做到这一点。任何帮助将非常感激。
解决方案
这是您可以使用的 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 似乎是必需的。它还sql.h
通过安装解决了丢失的文件unixodbc-dev
(请参阅mkleehammer/pyodbc#441)。
推荐阅读
- bigdata - 字符串列不在指标内列出,仅允许在 GoodData 中创建报告时从指标中选择数字列类型
- azure - 授予 Azure Active Directory 中的外部用户访问共享点站点的权限
- python - 未获得与分配标签相关的特定成本
- c# - 从用户向机器人发送消息
- eclipse - 我们如何在没有 Eclipse 的情况下使用 Junit 测试
- r - 如何使用 dplyr 计算迄今为止在组中遇到的不同值的数量
- python-3.x - 未能同步停止事件:CUDA_ERROR_LAUNCH_FAILED:未指定的启动失败
- jquery - 如何调用数据表行中添加的id
- domain-driven-design - 领域驱动设计实现聚合
- rest - 一个安静的网络服务是否可以在 url 中有一个参数?