我想安装先知在 Docker 容器中。我的 Dockerfile 如下所示:
FROM python:3.7
RUN pip install --upgrade pip
RUN pip install fbprophet
使用以下堆栈跟踪在“pip install fbprophet”步骤中构建图像错误:
Running setup.py install for fbprophet ... error
ERROR: Command errored out with exit status 1:
command: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-7ei5jssc/fbprophet_9a3a667ec353402389a02258feccfe51/setup.py'"'"'; __file__='"'"'/tmp/pip-install-7ei5jssc/fbprophet_9a3a667ec353402389a02258feccfe51/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-741oj2zp/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.7m/fbprophet
cwd: /tmp/pip-install-7ei5jssc/fbprophet_9a3a667ec353402389a02258feccfe51/
Complete output (10 lines):
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/fbprophet
creating build/lib/fbprophet/stan_model
Importing plotly failed. Interactive plots will not work.
INFO:pystan:COMPILING THE C++ CODE FOR MODEL anon_model_dfdaf2b8ece8a02eb11f050ec701c0ec NOW.
error: command 'gcc' failed with exit status 1
----------------------------------------
ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-7ei5jssc/fbprophet_9a3a667ec353402389a02258feccfe51/setup.py'"'"'; __file__='"'"'/tmp/pip-install-7ei5jssc/fbprophet_9a3a667ec353402389a02258feccfe51/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-741oj2zp/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.7m/fbprophet Check the logs for full command output.
我在网上找到了一些建议,但尝试过都没有成功(此时,我在没有这些建议的情况下构建了容器fbprophet
并运行了它,因此我可以实时尝试命令):
- 这里问题是未安装 gcc/g++。
- 我试过了
apt install g++ gcc
,仍然无法构建(它们已经安装)
- pnmartinez 的评论这里表明一些缺少构建工具。
- 我这样做了
apt-get install build-essential libncursesw5-dev libreadline-gplv2-dev libssl-dev libgdbm-dev libc6-dev libsqlite3-dev libbz2-dev libffi-dev zlib1g-dev
(运行apt-get upgrade
、、apt-get update
之后apt-get dist-upgrade
),并重试,结果相同。
- 本期 GH建议降级为
pystan==2.18
。
- 前这次提交
在 v0.6 中引入后,Prophet 限制自己只能使用 PyStan <=2.18.1,因此我尝试使用 pip install prophet==0.5,但仍然失败。(我尝试使用 0.2,但仍然失败。)然后我尝试
pip3 uninstall pystan && pip3 install pystan==2.18 && pip3 install fbprophet==0.5
使用相同的结果。
- 从 conda-forge 安装
- 我研究过这个,但在docker容器中安装一个可用的conda环境似乎相当复杂
- 我也开始尝试在基于 Alpine 的容器而不是 Debian 上安装。
- 我在 Prophet 阶段之前就开始遇到问题,总的来说,我认为在非标准发行版上构建复杂的 C++ 项目并不容易。
问题似乎是在 gcc 尝试构建 PyStan 模型时发生的。我猜是内存不足(有人声称,该cc1plus
进程top
使用了 2GB,大约占 RAM 的 90%)这里它最多可以使用 8GB)。但是,这是非常常见的软件,几个月前我成功使用相同的 Dockerfile 安装了 fbprophet,所以我不确定为什么这会成为一个问题。(我尝试在 macOS(Big Sur)和 Linux(Fedora 33)上构建它,结果相同。)
答案1
弄清楚了——因为这是一个内存问题,我只需要为 Docker VM 分配更多内存。这个答案解释如何使用 GUI 进行操作。浪费了很多时间……
答案2
嗯,这就是我发现的 - 我为 Docker VM 提供了 6 个 CPU,因此当它尝试构建代码时,GCC 会产生 6 个线程,每个线程都会消耗太多 RAM。我可以说 - 即使 16 Gb 也可能不够。因此,将 Docker VM 的 CPU 数量限制为 4 个 CPU 可能是一个不错的选择。
答案3
对于遇到此问题的其他任何人,我正在构建基础图像python:3.7-slim
更改以python:3.7
修复该问题
答案4
使用 Mac OSX Big Sur 11.6
我的 Dockerfile 包括
FROM python:3.7-slim
RUN pip install --upgrade pip
RUN pip install pystan==2.19
RUN pip install fbprophet