在Docker中设置cassandra驱动程序(python)

时间:2016-01-18 07:28:02

标签: python docker installation cassandra setuptools

几个月前我使用了一个docker文件:(1)使用基础ubuntu映像,(2)安装miniconda python发行版,(3)使用miniconda安装一些python库,(4)运行以下命令来设置cassandra-driver对于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 个答案:

答案 0 :(得分:5)

python cassandra-driver现在默认使用Cython扩展since version 2.7.0,但对于那些不能轻松访问cython发行版或者不需要它的人来说,有一个逃生舱。对你来说也许是一个不错的选择。 cython扩展确实为性能提供了一个好处,但它可能不适合很多情况(特别是在你没有做高吞吐量的情况下)。

来自install documentation

  

默认情况下,此程序包使用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>

答案 1 :(得分:3)

要安装cassandra-driver,您需要编译一些C源文件,但是您的容器中没有gcc

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

在安装gcc之前尝试安装python-devcassandra-driver个包:

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