【问题标题】:Set up cassandra driver (python) in Docker在 Docker 中设置 cassandra 驱动程序(python)
【发布时间】:2023-03-26 20:03:01
【问题描述】:

几个月前我使用了一个 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

可能出了什么问题?是安装包坏了还是我做的不对?

【问题讨论】:

    标签: python docker installation cassandra setuptools


    【解决方案1】:

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

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

    在安装cassandra-driver之前尝试安装gccpython-dev包:

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

    【讨论】:

      【解决方案2】:

      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>
      

      【讨论】:

      猜你喜欢
      • 2014-04-05
      • 2015-04-12
      • 2017-11-26
      • 2018-06-15
      • 2018-11-10
      • 2014-09-09
      • 2016-10-02
      • 1970-01-01
      • 2014-02-26
      相关资源
      最近更新 更多