2016-11-27 2 views
0

Wie installiert man Python2.6 in alpine Docker Container.Wie installiere ich python2.6 im alpinen Container?

Ich habe versucht, von der Quelle zu installieren, es gibt mir Kompilierungsfehler.

Eigentlich möchte ich Python2.6 und Python2.7 in Container installieren. Damit ich Unittests sowohl auf Python 2.6 als auch auf Python 2.7 ausführen kann. Bitte geben Sie einige Gedanken dazu.

Ich habe gcc, g ++, in alpine Container installiert dann die folgenden Schritte.

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 

habe diesen Fehler während machen,

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

Kann vorschlagen jemand, wie kann ich dieses Problem lösen?

+1

nicht sicher, dass es wird helfen, aber vielleicht wäre es einen Moment wert, einen Blick darauf zu werfen, wie Alpine 2.6 gebaut hat: http://git.alpinelinux.org/cgit/aports/tree/main/python?id=96e95a93287adc9c6bdf8689fa974b11d41dc492 und wie sie 2.7 bauen : http://git.alpinelinux.org/cgit/aports/ Baum/Haupt/python2. – wrwrwr

Antwort

1

Für python2.7 könnten Sie frolvlad/alpine-python2 verwenden, das ist ein 50MB python2.7-Image basierend auf alpine.

Und für python2.6, könnten Sie die Dockerfile erhalten und aktualisieren, so dass es funktioniert für diese Version als auch

1

Docker ein official repos hat, was ziemlich bequem zu bedienen ist. Praktischerweise gibt es ein python offizielles Repo. Es hat Bilder für verschiedene Versionen von Python (einschließlich 2.7) und verschiedene Basis-Betriebssysteme (einschließlich alpin). Ich würde empfehlen, die offizielle 2.7-alphine Bild und its Dockerfile als Referenz für die Installation von Python 2.6 verwenden.

Ich würde auch empfehlen, separate Bilder, eines mit Python 2.6 und eines mit 2.7 anstatt beide im selben Bild zu haben. Dies würde helfen, zwei verschiedene Python-Versionen nicht nebeneinander installieren/konfigurieren zu müssen.


Es ist schwer zu sagen, warum Ihr Build nicht ohne funktionierte, den Rest Ihres Dockerfile zu sehen, aber ein Platz zum Starten ist Abhängigkeiten aufzubauen. Die offizielle Dockerfile fügt Build-Abhängigkeiten für die Zeilen 37-53 hinzu. Diese Liste hat mehr Abhängigkeiten als die, die Sie installiert haben.

1

ich es geschafft, diese Funktion zu erhalten, indem Sie den Patch aus dieser Ausgabe Tweaking: https://bugs.python.org/issue20594 zu 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__}, 

ich meine volle Dockerfile und Patch hier gepostet:

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