Le coin des remarques, suggestions et bugs à faire remonter.
Répondre

Mise à jour du 5/09/2019, modification du comportement de PIP (Python)

#1Messageil y a 4 ans

Bonjour,
Depuis la dernière mise à jour de Manjaro (stable), les mainteneurs ont introduit le nouveau comportement de pip (l'installateur de modules Python) recommandé en upstream.
Dorénavant, pip n'installe (et pip list n'affiche) plus que les modules Python en mode user. Le réglage de ce comportement est dans /etc/pip.conf.
C'est une bonne chose pour l'avenir, on ne pourrira plus son installation Python en installant des modules n'importe comment avec pip.
Mais pour ceux qui comme moi avaient déjà installé en sudo une brochette de modules Python (et mécaniquement leurs dépendances...), tout un travail de parcours des dépendances des modules que j'avais installés a été nécessaire pour m'assurer que n'étaient plus installés en global que les modules gérés par pamac ou pacman et de transférer en user ceux qui restaient pour m'assurer de leur gestion par pip (upgrades futures).
Nota : je n'installe pas de modules Python via AUR
Ayant heureusement porté de longue date mon historique de bash à 50 000 entrées (!), trouver ce que j'avais installé n'a pas posé de problème. Le plus délicat a été de parcourir tout l'arbre de dépendance affiché par pipdeptree en recherchant chaque entrée dans pamac.
Il m'a fallu désinstaller pip (qui avait été mis à jour mainte fois) puis réinstaller sa version depuis les dépôts Manjaro.
In finé j'ai pu établir la liste exacte des paquets à transférer du mode global en mode user. Dans mon cas par exemple,
Modules explicitement installés :

ffpyplayer (https://github.com/matham/ffpyplayer/archive/master.zip)
graphviz
ipython
moviepy
pipdeptree
playsound
PyAudio
pydub
pygame
PySimpleGUI
python-vlc
simpleaudio
yad
Et leurs dépendances automatiquement installées et non-gérées par pamac :

backcall decorator imageio-ffmpeg imageio ipython-genutils jedi parso pickleshare proglog prompt-toolkit tqdm traitlets wcwidth
J'ai désinstallé du mode global et réinstallé en mode user à la mano ceux de la première liste (en jonglant avec le paramètre de réglage contenu dans pip.conf), puis un peu automatisé en CLI le transfert de la seconde liste :

Passer en mode global dans pip.conf :

su
for x in backcall decorator imageio-ffmpeg imageio ipython-genutils jedi parso pickleshare proglog prompt-toolkit tqdm traitlets wcwidth; do pip uninstall $x; done
exit

Repasser en mode user dans pip.conf :

for x in backcall decorator imageio-ffmpeg imageio ipython-genutils jedi parso pickleshare proglog prompt-toolkit tqdm traitlets wcwidth; do pip install $x; done
Dernier problème, pip list (dans son mode par défaut user) n'affiche plus la liste des modules globaux (et pipdeptree est malaisé à utiliser pour afficher spécifiquement les modules globaux).
J'ai donc écrit le petit script Python suivant après avoir épluché le code de pipdeptree pour m'afficher la liste des modules avec la précision du type d'installation pour chacun d'entre eux :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from pip._internal.utils.compat import stdlib_pkgs
from pip._internal.utils.misc import get_installed_distributions

module_List=get_installed_distributions(skip=stdlib_pkgs)

for item in reversed(module_List):
    line=str([item])
    if "/.local/" in line:
        prefix = "User:  "
    else:
        prefix = "Global:" 
    print(prefix, item)
qui m'affiche :

Global: alabaster 0.7.12
Global: anytree 2.6.0
Global: appdirs 1.4.3
Global: application-utility 1.1.4
Global: attrs 19.1.0
Global: autopep8 1.4.4
Global: Babel 2.7.0
Global: Beaker 1.11.0
Global: btrfsutil 1.1.1
Global: CacheControl 0.12.5
Global: catfish 1.4.9
Global: chardet 3.0.4
Global: colorama 0.4.1
Global: coverage 4.5.4
Global: cupshelpers 1.0
Global: cycler 0.10.0
Global: distlib 0.2.9
Global: distro 1.4.0
Global: docopt 0.6.2
Global: docutils 0.14
Global: gufw 19.10.0
Global: html5lib 1.0.1
Global: idna 2.8
Global: imagesize 1.1.0
Global: importlib-metadata 0.19
Global: Jade-Application-Kit 2.0.10
Global: Jinja2 2.10.1
Global: keyutils 0.6
Global: kiwisolver 1.1.0
Global: lensfun 0.3.2
Global: libmsym 0.2.4
Global: lightdm-gtk-greeter-settings 1.2.2
Global: lockfile 0.12.2
Global: louis 3.10.0
Global: lxml 4.4.1
Global: Mako 1.1.0
Global: mallard-ducktype 1.0.2
Global: Markdown 3.1.1
Global: MarkupSafe 1.1.1
Global: matplotlib 3.1.1
Global: menulibre 2.2.1
Global: meson 0.51.2
Global: more-itertools 4.3.0
Global: msgpack 0.6.1
Global: mugshot 0.4.1
Global: Ninja-IDE 2.3+dev
Global: npyscreen 4.10.5
Global: numpy 1.17.1
Global: packaging 19.1
Global: pacman-mirrors 4.14.2
Global: parse 1.12.1
Global: pdfarranger 1.3.0
Global: pep517 0.6.0
Global: pexpect 4.7.0
Global: pikepdf 1.6.3
Global: Pillow 6.1.0
Global: pip 19.2.3
Global: pkgbuilder 4.3.0
Global: progress 1.5
Global: psutil 5.6.3
Global: ptyprocess 0.6.0
Global: pwquality 1.4.0
Global: pyalpm 0.8.5
Global: pycairo 1.18.1
Global: pycodestyle 2.5.0
Global: pycups 1.9.74
Global: pycurl 7.43.0.3
Global: Pygments 2.4.2
Global: PyGObject 3.32.2
Global: pyparsing 2.4.2
Global: PyPDF2 1.26.0
Global: Pypubsub 4.0.3
Global: PyQt5-sip 4.19.18
Global: PyQt5 5.13.0
Global: PySide2 5.13.0
Global: python-dateutil 2.8.0
Global: python-distutils-extra 2.39
Global: pytoml 0.1.21
Global: pytz 2019.2
Global: pyxdg 0.26
Global: PyYAML 5.1.2
Global: requests 2.22.0
Global: retrying 1.3.3
Global: setuptools 41.2.0
Global: shiboken2 5.13.0
Global: six 1.12.0
Global: snowballstemmer 1.2.1
Global: sphinx-rtd-theme 0.4.3
Global: Sphinx 2.2.0
Global: sphinxcontrib-applehelp 1.0.1
Global: sphinxcontrib-devhelp 1.0.1
Global: sphinxcontrib-htmlhelp 1.0.2
Global: sphinxcontrib-jsmath 1.0.1
Global: sphinxcontrib-qthelp 1.0.2
Global: sphinxcontrib-serializinghtml 1.1.3
Global: sphinxcontrib-websupport 1.1.2
Global: SQLAlchemy 1.3.8
Global: srcinfo 0.0.8
Global: team 1.0
Global: udiskie 1.7.7
Global: ufw 0.36
Global: urllib3 1.25.3
Global: webencodings 0.5.1
Global: Whoosh 2.7.4
Global: wxPython 4.0.6
Global: yapf 0.28.0
Global: youtube-dl 2019.9.1
Global: zipp 0.6.0
User:   backcall 0.1.0
User:   decorator 4.4.0
User:   ffpyplayer 4.3.0.dev0
User:   graphviz 0.13
User:   imageio-ffmpeg 0.3.0
User:   imageio 2.5.0
User:   ipython-genutils 0.2.0
User:   ipython 7.8.0
User:   jedi 0.15.1
User:   moviepy 1.0.0
User:   parso 0.5.1
User:   pickleshare 0.7.5
User:   pipdeptree 0.13.2
User:   playsound 1.2.2
User:   proglog 0.1.9
User:   prompt-toolkit 2.0.9
User:   PyAudio 0.2.11
User:   pydub 0.23.1
User:   pygame 1.9.6
User:   PySimpleGUI 4.4.1
User:   python-vlc 3.0.7110
User:   simpleaudio 1.0.2
User:   tqdm 4.35.0
User:   traitlets 4.3.2
User:   wcwidth 0.1.7
User:   yad 0.9.14
que vous pouvez comparer au résultat d'un :
pipdeptree -a | grep -v " -"
pour vérifier que le nombre d'entrées est identique.
Et voilà !
Vous pouvez vous inspirer de ma démarche, mais faites attention aux particularités de votre installation !
Répondre