jeudi 17 janvier 2019

Environnement de developpemt Python et Ubuntu 18.10 : un calvaire ?

Évitons les longues introductions, le problème est le suivant :
paradoxalement, installer un environnement de développement Python3 +  pip3 + pipenv (outils de packaging Python recommandé officiellement) sur Ubuntu 18.10 est un véritable calvaire !!!

Voici les étapes logiques pour l'installation (python3 est déjà pré-installé par défaut sur Ubuntu 18.10) :

1. Installons pip pour python3 (le paquet python-pip est valable pour python2)
$ sudo apt install python3-pip
$ pip3 -V
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)
C'est un bon début.

2. Maintenant, utilisons pip3 pour installer pipenv :
$ pip3 install --user pipenv
ou :
$ python3 -m pip install pipenv --user
Collecting pipenv
  Using cached https://files.pythonhosted.org/packages/13/b4/3ffa55f77161cff9a5220f162670f7c5eb00df52e00939e203f601b0f579/pipenv-2018.11.26-py3-none-any.whl
Collecting pip>=9.0.1 (from pipenv)
  Using cached https://files.pythonhosted.org/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-py2.py3-none-any.whl
Collecting setuptools>=36.2.1 (from pipenv)
  Using cached https://files.pythonhosted.org/packages/37/06/754589caf971b0d2d48f151c2586f62902d93dc908e2fd9b9b9f6aa3c9dd/setuptools-40.6.3-py2.py3-none-any.whl
Collecting virtualenv (from pipenv)
  Using cached https://files.pythonhosted.org/packages/6a/d1/e0d142ce7b8a5c76adbfad01d853bca84c7c0240e35577498e20bc2ade7d/virtualenv-16.2.0-py2.py3-none-any.whl
Collecting virtualenv-clone>=0.2.5 (from pipenv)
  Using cached https://files.pythonhosted.org/packages/5b/66/6b0265b0f70222ebf8947989092546492b4ef280f560ddf92b80e9d7172a/virtualenv_clone-0.5.0-py2.py3-none-any.whl
Collecting certifi (from pipenv)
  Using cached https://files.pythonhosted.org/packages/9f/e0/accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/certifi-2018.11.29-py2.py3-none-any.whl
Installing collected packages: pip, setuptools, virtualenv, virtualenv-clone, certifi, pipenv
Successfully installed certifi-2018.11.29 pip-18.1 pipenv-2018.11.26 setuptools-40.6.3 virtualenv-16.2.0 virtualenv-clone-0.5.0

Malheureusement, et comme on pourrait s'en douter, le résultat est le même, pip3 est cassé.


3. Mais lorsqu'on tente de relancer pip3 :
$ pip3 -V
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'
Et là, le calvaire commence...


Pour régler ce problème "proprement", on peut faire un :
$ python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
Ce qui va supprimer pip, puis le réinstaller via apt. Mais le problème reste entier, puisqu'à chaque fois que l'on tentera d'installer pipenv via pip3, nous nous retrouverons avec la même erreur.

De plus, pipenv est inutilisable en l'état, puisque le PATH semble ne pas être configuré correctement et donc le shell ne trouve pas la commande pipenv.
Pour régler cela, il convient d'ajouter une ligne comme la suivante au fichier ~/.bashrc :
export PATH="${HOME}/.local/bin:$PATH"
Bon, d'une certaine manière, si nous acceptons de faire le deuil de pip3, nous avons au moins  un pipenv fonctionnel 👍



Ce que je vais me résigner à faire pour l'instant, car je voulais simplement coder en python3 et non faire du débug sur apt, pip3, pipenv, ou je ne sais quel composant du système.

Ce que je trouve vraiment dommage, c'est qu'une opération en apparence aussi simple qu'installer un module python via les outils prévus pour, pose finalement plus de problèmes qu'il n'en résout.

D'autant que les différentes documentations officielles et non-officielles nous proposent des instructions d'installation parfois très différentes les unes des autres, sans pour autant fournir une solution totalement satisfaisante sous Ubuntu 18.10 (homebrew, dépôt git, sources...).

Ce qui me gêne encore plus est le fait que toute cette opération semble apparemment fonctionner sans aucun embûche sur MacOS, et ça c'est quand-même un peu craignos pour Ubuntu, même si la responsabilité dans cette histoire semble compliquée à attribuer avec certitude...

EDIT :


Une solution par Matthew Brown :
# Install pip and pipenv
sudo apt install python3-pip python3-dev
pip3 install --user pipenv

# Add pipenv (and other python scripts) to PATH
echo "PATH=$HOME/.local/bin:$PATH" >> ~/.bashrc
source ~/.bashrc
Problème résolu !! 🎆
Apparemment le problème venait donc bien du PATH.

Notons que la version de pip3 a effectivement changé, maintenant que le système va bien chercher le bon dans le home de l'utilisateur  :
$ pip3 -V
pip 18.1 from /home/$USER/.local/lib/python3.6/site-packages/pip (python 3.6)
Merci Matthew ;)