2016-11-27 51 views
0

如何在高山码头集装箱中安装python2.6。如何在高山容器中安装python2.6?

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

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

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

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 

得到这个错误,而化妆,

~/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 

任何一个可以建议我怎么能解决这个问题?

+1

不知道它会有帮助,但也许这将是值得一会看看如何高山用于构建2.6:http://git.alpinelinux.org/cgit/aports/tree/main/python?id=96e95a93287adc9c6bdf8689fa974b11d41dc492以及它们如何建立2.7 :http://git.alpinelinux.org/cgit/aports/树/主/ python2。 – wrwrwr

回答

1

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

而对于python2.6的,你可以得到Dockerfile和更新,使之适用于该版本以及

1

码头工人有official repos,这是非常方便使用。方便,有一个python官方回购。它具有不同版本的Python(包括2.7)和不同基本操作系统(包括高山)的图像。我会建议使用官方2.7 alphine图像,并使用its Dockerfile作为安装Python 2.6的参考。

我还建议具有单独的图像,一个与Python 2.6和一个2.7,而不是两者在同一图像具有。这将有助于避免必须并排安装/配置两个不同版本的Python。


这很难说,为什么你的编译没有没有看到你的Dockerfile的其他工作,但一个地方开始是建立依赖关系。官方Dockerfile增加了建立在线路37-53依赖性列表有比你说你安装的那些更依赖。

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