【问题标题】:Docker build failing while installing pandas in docker in python2.7-alpine在 python2.7-alpine 中的 docker 中安装 pandas 时,Docker 构建失败
【发布时间】:2019-11-20 01:14:44
【问题描述】:

我在 Docker 中运行一个烧瓶应用程序。我也在使用熊猫。我正在使用 python2.7-alpine 图像。早些时候它工作正常,即我能够使用相同的配置构建图像。

但现在我无法按照它所说的那样构建图像:

ERROR: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-Sm9A7D/pandas/
The command '/bin/sh -c pip install -r /tmp/requirements.txt' returned a non-zero code: 1

我无法更改 python 版本。由于我的应用程序是基于 python2 构建的,并且在很久以前就符合预期。

我的 Dockerfile

FROM python:2.7-alpine

RUN echo "ipv6" >> /etc/modules; 
#    echo "http://dl-cdn.alpinelinux.org/alpine/latest-stable/main" > /etc/apk/repositories; \
#    echo "http://dl-cdn.alpinelinux.org/alpine/latest-stable/community" >> /etc/apk/repositories; \
#    echo "http://dl-2.alpinelinux.org/alpine/latest-stable/community" >> /etc/apk/repositories; \
#    echo "http://dl-3.alpinelinux.org/alpine/latest-stable/community" >> /etc/apk/repositories; \
#    echo "http://dl-4.alpinelinux.org/alpine/latest-stable/community" >> /etc/apk/repositories; \
#    echo "http://dl-5.alpinelinux.org/alpine/latest-stable/community" >> /etc/apk/repositories

RUN rm -rf /var/cache/apk/* && \
    rm -rf /tmp/* && \
    apk update && \
    apk add --update bash sudo


#================================================================
# add dependencies
#================================================================

RUN apk add --update --no-cache g++ gcc libffi-dev make gpgme p11-kit openssl-dev openssh

#================================================================
# pip and required modules install
#================================================================

### Upgrade pip to prevent errors
RUN pip install setuptools --upgrade
ADD requirements.txt /tmp/requirements.txt
RUN pip install -r /tmp/requirements.txt

完整的错误回溯是:

ERROR: Complete output from command python setup.py egg_info:
    ERROR: Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-Sm9A7D/pandas/setup.py", line 749, in <module>
        **setuptools_kwargs)
      File "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", line 144, in setup
        _install_setup_requires(attrs)
      File "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", line 139, in _install_setup_requires
        dist.fetch_build_eggs(dist.setup_requires)
      File "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", line 717, in fetch_build_eggs
        replace_conflicting=True,
      File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 782, in resolve
        replace_conflicting=replace_conflicting
      File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1065, in best_match
        return self.obtain(req, installer)
      File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1077, in obtain
        return installer(requirement)
      File "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", line 784, in fetch_build_egg
        return cmd.easy_install(req)
      File "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 679, in easy_install
        return self.install_item(spec, dist.location, tmpdir, deps)
      File "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 705, in install_item
        dists = self.install_eggs(spec, download, tmpdir)
      File "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 890, in install_eggs
        return self.build_and_install(setup_script, setup_base)
      File "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1158, in build_and_install
        self.run_setup(setup_script, setup_base, args)
      File "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1144, in run_setup
        run_setup(setup_script, args)
      File "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 253, in run_setup
        raise
      File "/usr/local/lib/python2.7/contextlib.py", line 35, in __exit__
        self.gen.throw(type, value, traceback)
      File "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 195, in setup_context
        yield
      File "/usr/local/lib/python2.7/contextlib.py", line 35, in __exit__
        self.gen.throw(type, value, traceback)
      File "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 166, in save_modules
        saved_exc.resume()
      File "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 141, in resume
        six.reraise(type, exc, self._tb)
      File "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 154, in save_modules
        yield saved
      File "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 195, in setup_context
        yield
      File "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 250, in run_setup
        _execfile(setup_script, ns)
      File "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 45, in _execfile
        exec(code, globals, locals)
      File "/tmp/easy_install-2BV0tR/numpy-1.17.0rc1/setup.py", line 31, in <module>
        def is_platform_mac():
    RuntimeError: Python version >= 3.5 required.
    ----------------------------------------
ERROR: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-Sm9A7D/pandas/
The command '/bin/sh -c pip install -r /tmp/requirements.txt' returned a non-zero code: 1

【问题讨论】:

  • 您能显示您的requirements.txt 文件中的内容吗?如果你说安装pandas时失败,你安装的是哪个版本的pandas
  • @bunji pandas==0.23.4

标签: pandas python-2.7 docker pip alpine


【解决方案1】:

错误告诉你原因:

文件“/tmp/easy_install-r9No9Q/numpy-1.17.0rc1/setup.py”,第 31 行,在
def is_platform_mac():
RuntimeError:需要 Python 版本 >= 3.5。

从pandas 0.23.4 source:我们可以看到numpy的最低版本是1.9.0

min_numpy_ver = '1.9.0'

所以,如果你没有自己安装一个版本,pandas 只会为你安装一个最新的合适的 numpy 版本,&gt;1.9.0,这里是numpy-1.17.0rc1,但它需要&gt;python3.5,如here,所以失败发生了。

python_requires='>=3.5'

最后,如果你查看numpy的源码,你会发现1.16.4是支持python2.7的最后一个版本,见this

python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*',

所以,最终解决方案

预先安装 numpy 1.16.4,然后 pandas 会发现那里有合适的 numpy,不会为你安装最新的 numpy。结果不会出错,详细步骤如下:

apk update
apk add build-base
pip install numpy==1.16.4
pip install pandas==0.23.4

对于Dockerfile,将上述命令添加到一个 RUN 可以修复:

RUN apk update && \
    apk add build-base && \
    pip install numpy==1.16.4 && \
    pip install pandas==0.23.4

另外,你说的有问题:

之前它运行良好,即我能够使用相同的配置构建图像。

这是因为numpy latest version 刚刚在 2019 年 7 月 1 日更新,在此之前,它始终是 1.16.4 版本,对于 python27 没有问题,但现在,情况发生了变化......

【讨论】:

    猜你喜欢
    • 2019-07-20
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 2019-05-17
    • 2019-02-23
    • 2017-07-14
    相关资源
    最近更新 更多