无法安装scipy

4

我正在尝试从一个Dockerfile中安装scipy,但我无论如何都无法弄清楚该怎么做。

这是Dockerfile的内容:

FROM python:3.5

ENV HOME /root

# Install dependencies
RUN apt-get update
RUN apt-get install -y gcc
RUN apt-get install -y build-essential
RUN apt-get install -y zlib1g-dev
RUN apt-get install -y wget
RUN apt-get install -y unzip
RUN apt-get install -y cmake
RUN apt-get install -y python3-dev
RUN apt-get install -y gfortran
RUN apt-get install -y python-numpy
RUN apt-get install -y python-matplotlib
RUN apt-get install -y ipython
RUN apt-get install -y ipython-notebook
RUN apt-get install -y python-pandas
RUN apt-get install -y python-sympy
RUN apt-get install -y python-nose

# Install Python packages
RUN pip install --upgrade pip
RUN pip install cython

# Install scipy
RUN apt-get install -y python-scipy

这会构建一个镜像,但是当我运行容器并尝试 import scipy 时,它会显示:

Python 3.5.1 (default, Mar  9 2016, 03:30:07)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'scipy'

我尝试使用 RUN pip install scipyRUN pip install git+https://github.com/scipy/scipy.git,但在完成构建之前就出现了错误。

说实话,我不熟悉Docker。除了依赖于“numpy”之外,有什么阻止你在终端上运行“pip install git+https://github.com/scipy/scipy.git”呢? - Patrick the Cat
1
你不想要 python3-scipy 吗?看起来你的系统默认使用 Python3。 - Suever
Docker只是构建了一个自包含的环境...所以我从Debian Jessie镜像开始,安装Python 3.5,然后按顺序运行软件包/模块的安装命令。 - jdesilvio
1
除非您使用apt安装所有Python2.x软件包,否则@jdesilvio。 - Suever
@jdesilvio 字面上在每个命令前都加上 "python3",例如 apt-get install python3-packagename 而不是 apt-get install python-packagename - Suever
显示剩余4条评论
1个回答

6

您正在使用Python 3,但安装的是Python 2的软件包。请将您的Dockerfile更改为以下内容:

FROM python:3.5

ENV HOME /root
ENV PYTHONPATH "/usr/lib/python3/dist-packages:/usr/local/lib/python3.5/site-packages"

# Install dependencies
RUN apt-get update \
    && apt-get upgrade -y \
    && apt-get autoremove -y \
    && apt-get install -y \
        gcc \
        build-essential \
        zlib1g-dev \
        wget \
        unzip \
        cmake \
        python3-dev \
        gfortran \
        libblas-dev \
        liblapack-dev \
        libatlas-base-dev \
    && apt-get clean

# Install Python packages
RUN pip install --upgrade pip \
    && pip install \
        ipython[all] \
        numpy \
        nose \
        matplotlib \
        pandas \
        scipy \
        sympy \
        cython \
    && rm -fr /root/.cache

我仍然收到 ImportError: No module named 'scipy' - jdesilvio
是的,PYTHONPATH存在问题。很快会有更新。 - Garrett Hyde
使用“apt-get install python3-numpy”时,numpy包内部存在一个bug。因此,我将所有的Python包移动到了“pip install”。 - Garrett Hyde
1
这会抛出numpy.distutils.system_info.NotFoundError: no lapack/blas resources found的错误。需要添加apt-get install libopenblas-dev - jdesilvio
我成功地让它工作了,而没有使用libatlas-base-dev。谢谢! - jdesilvio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接