基于Debian的映像仅
python pip用于安装以下
.whl格式的软件包:
Downloading pandas-0.22.0-cp36-cp36m-manylinux1_x86_64.whl (26.2MB) Downloading numpy-1.14.1-cp36-cp36m-manylinux1_x86_64.whl (12.2MB)
WHL格式是一种比每次都从源代码重新构建更快,更可靠的安装Python软件的方法。WHL文件仅需移动到要安装的目标系统上的正确位置,而源分发需要在安装之前进行构建。
轮包
pandas和
numpy基于高山平台,图像不支持。这就是为什么
pythonpip在构建过程中使用它们进行安装时,我们总是从alpine的源文件中编译它们:
Downloading pandas-0.22.0.tar.gz (11.3MB) Downloading numpy-1.14.1.zip (4.9MB)
我们可以在图像构建过程中看到以下内部容器:
/ # ps auxPID USER TIME COMMAND 1 root 0:00 /bin/sh -c pip install pandas 7 root 0:04 {pip} /usr/local/bin/python /usr/local/bin/pip install pandas 21 root 0:07 /usr/local/bin/python -c import setuptools, tokenize;__file__='/tmp/pip-build-en29h0ak/pandas/setup.py';f=getattr(tokenize, 'open', open)(__file__);pre=f.read().replace('rn', 'n 496 root 0:00 sh 660 root 0:00 /bin/sh -c gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DTHREAD_STACK_SIZE=0x100000 -fPIC -Ibuild/src.linux-x86_64-3.6/numpy/core/src/pri 661 root 0:00 gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DTHREAD_STACK_SIZE=0x100000 -fPIC -Ibuild/src.linux-x86_64-3.6/numpy/core/src/private -Inump 662 root 0:00 /usr/libexec/gcc/x86_64-alpine-linux-musl/6.4.0/cc1 -quiet -I build/src.linux-x86_64-3.6/numpy/core/src/private -I numpy/core/include -I build/src.linux-x86_64-3.6/numpy/core/includ 663 root 0:00 ps aux如果我们
Dockerfile稍作修改:
FROM python:3.6.4-alpine3.7RUN apk add --no-cache g++ wgetRUN wget https://pypi.python.org/packages/da/c6/0936bc5814b429fddb5d6252566fe73a3e40372e6ceaf87de3dec1326f28/pandas-0.22.0-cp36-cp36m-manylinux1_x86_64.whlRUN pip install pandas-0.22.0-cp36-cp36m-manylinux1_x86_64.whl
我们得到以下错误:
Step 4/4 : RUN pip install pandas-0.22.0-cp36-cp36m-manylinux1_x86_64.whl ---> Running in 0faea63e2bdapandas-0.22.0-cp36-cp36m-manylinux1_x86_64.whl is not a supported wheel on this platform.The command '/bin/sh -c pip install pandas-0.22.0-cp36-cp36m-manylinux1_x86_64.whl' returned a non-zero pre: 1
不幸的是,在
pandasAlpine映像上安装的唯一方法是等到构建完成。
当然
pandas,例如,如果要在CI中使用Alpine映像,最好的方法是将其编译一次,将其推送到任何注册表中,然后将其用作满足您需要的基础映像。
编辑: 如果您想使用Alpine图像,
pandas可以拉我的nickgryg / alpine-pandas
docker图像。这是
pandas在Alpine平台上预编译的python图像。它应该可以节省您的时间。



