2016-11-27 1 views
0

Comment installer python2.6 dans un conteneur docker alpin.Comment installer python2.6 dans un conteneur alpin?

J'ai essayé d'installer à partir de la source, ce qui me donne des erreurs de compilation.

En fait, je veux installer Python2.6 et Python2.7 dans le conteneur. Alors que je peux lancer unittests à la fois sur Python2.6 et Python2.7. S'il vous plaît donner quelques idées à ce sujet.

J'ai installé gcc, g ++, make dans un conteneur alpin, puis j'ai effectué les étapes suivantes.

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 

obtenu cette erreur tout faire,

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

Peut-on suggérer comment puis-je résoudre ce problème?

+1

Je ne sais pas ce va aider, mais peut-être que ça vaut la peine de jeter un coup d'œil à la façon dont Alpine a construit 2.6: http://git.alpinelinux.org/cgit/aports/tree/main/python?id=96e95a93287adc9c6bdf8689fa974b11d41dc492 et comment ils construisent 2.7 : http://git.alpinelinux.org/cgit/aports/ tree/main/python2. – wrwrwr

Répondre

1

Pour python2.7, vous pouvez utiliser frolvlad/alpine-python2, qui est une image python2.7 de 50 Mo basée sur l'alpin.

Et pour python2.6, vous pourriez obtenir le Dockerfile et le mettre à jour, de sorte qu'il fonctionne pour cette version ainsi

1

Docker a une official repos, qui sont assez pratique à utiliser. Idéalement, il existe un dépôt officiel python. Il a des images pour différentes versions de Python (y compris 2.7) et différents OS de base (y compris les alpins). Je recommande d'utiliser l'image officielle 2.7-alphine et en utilisant its Dockerfile comme référence pour l'installation de python 2.6.

Je vous recommande également d'avoir des images séparées, une avec python 2.6 et une avec 2.7 plutôt que d'avoir les deux dans la même image. Cela éviterait d'avoir à installer/configurer deux versions différentes de python côte à côte.


Il est difficile de dire pourquoi votre construction ne fonctionne pas sans voir le reste de votre Dockerfile, mais un endroit pour commencer est de construire des dépendances. Le Dockerfile officiel ajoute des dépendances de construction sur les lignes 37-53, cette liste a plus de dépendances que celles que vous avez dites avoir installées.

1

j'ai réussi à obtenir ce travail en modifiant légèrement le patch de ce numéro: 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__}, 

Je posté mon plein Dockerfile et le patch ici:

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