如何在高山容器中安装python2.6?

时间:2016-11-27 16:28:24

标签: python gcc docker alpine

如何在alpine docker容器中安装python2.6。

我尝试从源代码安装,它给我编译错误。

实际上我想在容器中安装Python2.6和Python2.7。这样我就可以在Python2.6和Python2.7上运行单元测试。请对此提出一些想法。

我已经在高山容器中安装了gcc,g ++,make然后执行了以下步骤。

wget https://www.python.org/ftp/python/2.6/Python-2.6.tgz
tar xvzf Python-2.6.tgz
cd Python-2.6
./configure
make

make时出现此错误,

~/Python-2.6 # make
gcc -c -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes  -I. -IInclude -I./Include   -DPy_BUILD_CORE -o Modules/config.o Modules/config.c
gcc -c -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes  -I. -IInclude -I./Include   -DPy_BUILD_CORE -DPYTHONPATH='":plat-linux4:lib-tk:lib-old"' \
    -DPREFIX='"/usr/local"' \
    -DEXEC_PREFIX='"/usr/local"' \
    -DVERSION='"2.6"' \
    -DVPATH='""' \
    -o Modules/getpath.o ./Modules/getpath.c
gcc -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes  -I. -IInclude -I./Include   -DPy_BUILD_CORE  -c ./Modules/posixmodule.c -o Modules/posixmodule.o
./Modules/posixmodule.c:6173:1: error: conflicting types for 'posix_close'
 posix_close(PyObject *self, PyObject *args)
 ^
In file included from Include/Python.h:44:0,
                 from ./Modules/posixmodule.c:30:
/usr/include/unistd.h:38:5: note: previous declaration of 'posix_close' was here
 int posix_close(int, int);
     ^
Makefile:1234: recipe for target 'Modules/posixmodule.o' failed
make: *** [Modules/posixmodule.o] Error 1

任何人都可以建议我如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

对于python2.7,您可以使用frolvlad/alpine-python2,这是一个基于高山的50MB python2.7图像。

对于python2.6,您可以获取Dockerfile并对其进行更新,以便它也适用于该版本

答案 1 :(得分:1)

Docker有一个official repos,使用起来非常方便。方便的是,有一个python官方回购。它有不同版本的Python(包括2.7)和不同的基本操作系统(包括alpine)的图像。我建议使用官方的 2.7-alphine 图像,并使用its Dockerfile作为安装python 2.6的参考。

我还建议使用单独的图像,一个使用python 2.6,另一个使用2.7,而不是同时使用两个图像。这有助于避免必须并排安装/配置两个不同版本的python。

如果没有看到Dockerfile的其余内容,很难说出为什么你的构建不起作用,但是一个开始的地方是构建依赖项。官方Dockerfile在行37-53上添加了构建依赖项,该列表具有比您所说的安装依赖项更多的依赖项。

答案 2 :(得分:1)

我设法通过调整此问题的补丁来实现这一点:https://bugs.python.org/issue20594到Python 2:

--- ./Modules/posixmodule.c.orig
+++ ./Modules/posixmodule.c
@@ -3896,7 +3896,7 @@
 #endif
     gid_t grouplist[MAX_GROUPS];

-    /* On MacOSX getgroups(2) can return more than MAX_GROUPS results
+    /* On MacOSX getgroups(2) can return more than MAX_GROUPS results
      * This is a helper variable to store the intermediate result when
      * that happens.
      *
@@ -6357,7 +6357,7 @@
 Close a file descriptor (for low level IO).");

 static PyObject *
-posix_close(PyObject *self, PyObject *args)
+posix_closex(PyObject *self, PyObject *args)
 {
     int fd, res;
     if (!PyArg_ParseTuple(args, "i:close", &fd))
@@ -8602,7 +8602,7 @@
     {"tcsetpgrp",       posix_tcsetpgrp, METH_VARARGS, posix_tcsetpgrp__doc__},
 #endif /* HAVE_TCSETPGRP */
     {"open",            posix_open, METH_VARARGS, posix_open__doc__},
-    {"close",           posix_close, METH_VARARGS, posix_close__doc__},
+    {"close",           posix_closex, METH_VARARGS, posix_close__doc__},
     {"closerange",      posix_closerange, METH_VARARGS, posix_closerange__doc__},
     {"dup",             posix_dup, METH_VARARGS, posix_dup__doc__},
     {"dup2",            posix_dup2, METH_VARARGS, posix_dup2__doc__},

我在这里发布了我的完整Dockerfile和补丁:

https://gist.github.com/cwill747/722f41d8807c3b41a1e417849634cfe5