首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:3.7-stretch unixodbc : Conflicts: unixodbc-bin

Python:3.7-stretch unixodbc : Conflicts: unixodbc-bin
EN

Stack Overflow用户
提问于 2019-03-08 06:08:01
回答 1查看 629关注 0票数 1

我有一个运行在Docker容器中的Python Flask应用程序,它通过SQLAlchemy连接到MS SQL Server (一个公司数据库)。然而,当我尝试构建容器时,我得到了包冲突。这是我的Dockerfile:

代码语言:javascript
复制
FROM python:3.7-stretch

# Get the ODBC driver for Microsoft SQL Server
RUN apt-get update \
&& apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
&& curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/9/prod.list  > /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update \
&& ACCEPT_EULA=Y apt-get -y install --no-install-recommends msodbcsql17 \
    unixodbc \
    unixodbc-bin \
    unixodbc-dev \
&& apt-get clean

# Setup the project
RUN mkdir -p /app
WORKDIR /app

COPY . .

RUN python setup.py install

CMD [ '/bin/bash' ]

当我构建这个的时候,我得到了:

代码语言:javascript
复制
 unixodbc : Conflicts: unixodbc-bin (< 2.3.7) but 2.3.0-4+b1 is to be installed

据我在2019年2月25日的构建日志中所知,这是有效的,但也有可能是使用了缓存图像。

我已经尝试使用库的特定版本来避免这个问题:

代码语言:javascript
复制
&& ACCEPT_EULA=Y apt-get -y install --no-install-recommends msodbcsql17=17.2.0.1-1 \
    unixodbc=2.3.4-1 \
    unixodbc-bin=2.3.0-4+b1 \
    unixodbc-dev=2.3.4-1 \
    libodbc1=2.3.4-1 \
    odbcinst1debian2=2.3.4-1 \
    odbcinst=2.3.4-1 \
&& apt-get clean

这样就可以使用--no-cache构建容器,但是当应用程序试图连接到数据库时,它就会永远挂起。我也使用了msodbcsql17=17.1.0.1-1,并得到了相同的结果。

下面是我的应用程序的setup.py:

代码语言:javascript
复制
from setuptools import setup, find_packages

setup(name='catfnolbackend',
      version='0.1.0',
      packages=find_packages(),
      package_dir={'catfnolbackend': 'catfnolbackend'},
      include_package_data=True,
      platforms='any',
      install_requires=['Flask==1.0.2',
                        'flask-cors==3.0.6',
                        'SQLAlchemy==1.2.13',
                        'geoalchemy2==0.5.0',
                        'pyodbc==4.0.24',
                        'flask-dance==1.3.0',
                        'flask-login==0.4.1',
                        'blinker==1.4'
                        ],
      setup_requires=['pytest-runner'],
      tests_require=['pytest'],
      )

如果我删除多余的库,只使用msodbcsql17,那么pyodbc4.0.24也不会构建。

我应该指定更好的unixodbc版本吗?有没有我遗漏的更改日志,可以给出为什么依赖性突然崩溃的背景?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-11 22:49:34

重新启动数据库后(连接尝试挂起的真正原因),现在可以指定每个库的版本:

代码语言:javascript
复制
&& ACCEPT_EULA=Y apt-get -y install --no-install-recommends msodbcsql17=17.2.0.1-1 \
    unixodbc=2.3.4-1 \
    unixodbc-bin=2.3.0-4+b1 \
    unixodbc-dev=2.3.4-1 \
    libodbc1=2.3.4-1 \
    odbcinst1debian2=2.3.4-1 \
    odbcinst=2.3.4-1 \
&& apt-get clean
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55053583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档