Je sais que ce titre peut prêter à confusion, alors pour clarifier : le conteneur docker démarre très bien. Python continue de planter lorsque j'essaie de l'ouvrir.
Mon ordinateur fonctionne sous Ubunutu. Voici la sortie de uname -a :
Linux work-laptop 4.15.0-39-generic #42-Ubuntu SMP
Tue Oct 23 15:48:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
J'ai un conteneur docker basé sur l'image Python:3.6.3. J'ai également essayé avec les images alpine, jessie, slim et stretch, ainsi qu'avec quelques autres versions 3.6. Elles ont toutes le même problème.
Je lance le conteneur nommé 'nb', et je m'attache à un shell interactif :
docker-compose run nb sh
Le conteneur démarre sans problème, mais lorsque j'essaie d'ouvrir le shell python :
python
Je reçois un étrange message d'erreur :
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
Current thread 0x00007f32546ae700 (most recent call first):
Aborted (core dumped)
J'ai vérifié $PYTHONPATH et $PYTHONHOME, les deux ne sont pas définis.
Ce qui est étrange, c'est que si je spécifie d'utiliser python 2.7 :
python2
le shell démarre sans problème. De même, si j'utilise l'une des images 3.7 et que j'ouvre un shell python 3.7, il n'y a aucun problème. Le problème semble se limiter à la version 3.6.
Les recherches que j'ai effectuées à ce sujet m'indiquent qu'il s'agit probablement d'un problème avec les variables d'environnement. J'ai essayé de définir manuellement PYTHONHOME avec les valeurs suivantes (individuellement)
/usr/local/lib
/usr/local/lib/python
/usr/local/lib/python3.6
sans que le résultat soit modifié. La seule différence est que le message d'erreur ne suggère plus de paramétrer PYTHONHOME
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
Current thread 0x00007f32546ae700 (most recent call first):
Aborted (core dumped)
J'ai pensé que le problème pouvait provenir d'une commande dans mon fichier docker, alors j'ai tout supprimé et j'ai lancé une image python non filtrée. Même problème. J'ai retéléchargé, essayé d'autres images, aucun changement. Je ne peux pas imaginer que toutes (ou vraiment aucune) des images python officielles puissent être à l'origine de ce problème, je suppose donc que le problème doit venir de ma machine hôte, mais je ne trouve rien qui touche ce sujet. Des idées ?