Настройка драйвера cassandra (python) в Docker


Я использовал настройки файл несколько месяцев назад, что (1) использует базовый образ Ubuntu, (2) устанавливает miniconda питона распределение, (3) устанавливает какой-либо Python-библиотек, используя miniconda, (4) выполняется следующие команды, чтобы установить Кассандра-драйвера для Python.

RUN pip install --upgrade pip
RUN pip install cassandra-driver
Это прекрасно сработало полгода назад. Но теперь я получаю это исключение.
Step 13 : RUN pip install cassandra-driver
 ---> Running in ba9955650d7c
Collecting cassandra-driver
  Downloading cassandra-driver-3.0.0.tar.gz (186kB)
    Complete output from command python setup.py egg_info:
    warning: no files found matching '*.pyx' under directory 'Cython/Debugger/Tests'
    warning: no files found matching '*.pxd' under directory 'Cython/Debugger/Tests'
    warning: no files found matching '*.h' under directory 'Cython/Debugger/Tests'
    warning: no files found matching '*.pxd' under directory 'Cython/Utility'
    unable to execute 'gcc': No such file or directory
    Unable to find pgen, not compiling formal grammar.
    Traceback (most recent call last):
      File "<string>", line 20, in <module>
      File "/tmp/pip-build-0XzsPv/cassandra-driver/setup.py", line 375, in <module>
        run_setup(None)
      File "/tmp/pip-build-0XzsPv/cassandra-driver/setup.py", line 373, in run_setup
        **kw)
      File "/miniconda/lib/python2.7/distutils/core.py", line 111, in setup
        _setup_distribution = dist = klass(attrs)
      File "/miniconda/lib/python2.7/site-packages/setuptools-19.1.1-py2.7.egg/setuptools/dist.py", line 268, in __init__
      File "/miniconda/lib/python2.7/site-packages/setuptools-19.1.1-py2.7.egg/setuptools/dist.py", line 312, in fetch_build_eggs
      File "/miniconda/lib/python2.7/site-packages/setuptools-19.1.1-py2.7.egg/pkg_resources/__init__.py", line 846, in resolve
      File "/miniconda/lib/python2.7/site-packages/setuptools-19.1.1-py2.7.egg/pkg_resources/__init__.py", line 1091, in best_match
      File "/miniconda/lib/python2.7/site-packages/setuptools-19.1.1-py2.7.egg/pkg_resources/__init__.py", line 1103, in obtain
      File "/miniconda/lib/python2.7/site-packages/setuptools-19.1.1-py2.7.egg/setuptools/dist.py", line 379, in fetch_build_egg
      File "/miniconda/lib/python2.7/site-packages/setuptools-19.1.1-py2.7.egg/setuptools/command/easy_install.py", line 639, in easy_install
      File "/miniconda/lib/python2.7/site-packages/setuptools-19.1.1-py2.7.egg/setuptools/command/easy_install.py", line 669, in install_item
      File "/miniconda/lib/python2.7/site-packages/setuptools-19.1.1-py2.7.egg/setuptools/command/easy_install.py", line 852, in install_eggs
      File "/miniconda/lib/python2.7/site-packages/setuptools-19.1.1-py2.7.egg/setuptools/command/easy_install.py", line 1080, in build_and_install
      File "/miniconda/lib/python2.7/site-packages/setuptools-19.1.1-py2.7.egg/setuptools/command/easy_install.py", line 1068, in run_setup
    distutils.errors.DistutilsError: Setup script exited with error: command 'gcc' failed with exit status 1

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-0XzsPv/cassandra-driver
The command '/bin/sh -c pip install cassandra-driver' returned a non-zero code: 1

Что может пойти не так? Сломан ли установочный пакет или я делаю это неправильно?

2 3

2 ответа:

Драйвер Python cassandra теперь использует расширения Cython по умолчанию начиная с версии 2.7.0, но есть аварийный люк для тех, кто не имеет легкого доступа к дистрибутиву cython или не нуждается в нем, что может быть хорошим вариантом и для вас. Расширения cython действительно предлагают преимущества для производительности, но они могут не подходить для многих случаев (особенно когда вы не делаете высокую пропускную способность).

Из документации по установке :

By по умолчанию этот пакет использует Cython для оптимизации основных модулей и построения пользовательских расширений. Это не является жестким требованием, но по умолчанию используется для построения расширений, предлагающих лучшую производительность, чем чистая реализация Python.

Этой фазы сборки можно избежать, используя переключатель сборки или переменную окружения:

python setup.py install --no-cython
-or-
pip install --install-option="--no-cython" <spec-or-path>

Альтернативно, переменная окружения может быть использована для переключения этой опции независимо от контекста:

CASS_DRIVER_NO_CYTHON=1 <your script here>

Для установки cassandra-driver вам нужно скомпилировать некоторые исходные файлы C, однако у вас нет gcc внутри контейнера:

unable to execute 'gcc': No such file or directory

Попробуйте установить пакеты gcc и python-dev Перед установкой cassandra-driver:

RUN apt-get update \
  && apt-get install -y --no-install-recommends \
    python-dev \
    gcc \
  && rm -rf /var/lib/apt/lists/*