Python: 3.7-полосный unixodbc: конфликты: unixodbc-bin - PullRequest
1 голос
/ 08 марта 2019

У меня есть приложение Python Flask, работающее в контейнере Docker, которое подключается к MS SQL Server (корпоративная база данных) через SQLAlchemy. Однако при сборке контейнера я получаю конфликты пакетов. Вот мой Dockerfile:

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' ]

Когда я строю это, я получаю:

 unixodbc : Conflicts: unixodbc-bin (< 2.3.7) but 2.3.0-4+b1 is to be installed

Это работало, насколько я могу судить из моих журналов сборки, 25-ФЕВ-2019, но, возможно, использовалось кэшированное изображение.

Я пытался использовать определенные версии для библиотек, чтобы избежать проблемы:

&& 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:

моего приложения
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, то pyodbc 4.0.24 тоже не собирается.

Есть ли лучшие версии unixodbc, которые я должен указать? Есть ли пропущенные журналы изменений, которые бы давали представление о том, почему зависимость внезапно прервалась?

1 Ответ

0 голосов
/ 11 марта 2019

После перезапуска базы данных (реальная причина моих попыток подключения зависла), указание версий каждой библиотеки теперь работает:

&& 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
...