[PYTHON] Facilitons un peu la gestion des dépendances avec pip

introduction

J'ai écouté le Dernier épisode (208e) du podcast PythonBytes et j'ai introduit un outil qui semble intéressant, alors je l'ai essayé. Je pense que la gestion des dépendances avec pip sera un peu plus facile.

La gestion des dépendances avec pip et ses enjeux

Tout d'abord, un examen de base de la gestion des dépendances avec pip. Utilisez pip install pour installer les packages requis. Par exemple, si vous installez deux packages, "requests" et "pandas", vous obtiendrez ce qui suit.

$ pip install requests
Collecting requests
  Downloading requests-2.25.0-py2.py3-none-any.whl (61 kB)
     |████████████████████████████████| 61 kB 7.2 MB/s
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.2-py2.py3-none-any.whl (136 kB)
     |████████████████████████████████| 136 kB 10.5 MB/s
Collecting certifi>=2017.4.17
  Downloading certifi-2020.11.8-py2.py3-none-any.whl (155 kB)
     |████████████████████████████████| 155 kB 12.9 MB/s
Collecting chardet<4,>=3.0.2
  Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)
Collecting idna<3,>=2.5
  Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Installing collected packages: urllib3, certifi, chardet, idna, requests
Successfully installed certifi-2020.11.8 chardet-3.0.4 idna-2.10 requests-2.25.0 urllib3-1.26.2
$ pip install pandas
Collecting pandas
  Downloading pandas-1.1.4-cp39-cp39-macosx_10_9_x86_64.whl (10.3 MB)
     |████████████████████████████████| 10.3 MB 5.9 MB/s
Collecting numpy>=1.15.4
  Using cached numpy-1.19.4-cp39-cp39-macosx_10_9_x86_64.whl (15.4 MB)
Collecting pytz>=2017.2
  Downloading pytz-2020.4-py2.py3-none-any.whl (509 kB)
     |████████████████████████████████| 509 kB 31.7 MB/s
Collecting python-dateutil>=2.7.3
  Downloading python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB)
     |████████████████████████████████| 227 kB 33.8 MB/s
Collecting six>=1.5
  Using cached six-1.15.0-py2.py3-none-any.whl (10 kB)
Installing collected packages: numpy, pytz, six, python-dateutil, pandas
Successfully installed numpy-1.19.4 pandas-1.1.4 python-dateutil-2.8.1 pytz-2020.4 six-1.15.0

Si vous regardez cela, il extraira automatiquement non seulement le package spécifié, mais également les packages dont il dépend. Utilisez pip freeze si vous voulez voir une liste des paquets installés.

$ pip freeze
certifi==2020.11.8
chardet==3.0.4
idna==2.10
numpy==1.19.4
pandas==1.1.4
python-dateutil==2.8.1
pytz==2020.4
requests==2.25.0
six==1.15.0
urllib3==1.26.2

Ce n'est pas quelque chose que Python a décidé, mais beaucoup de gens écrivent ce résultat dans un fichier appelé requirements.txt et le regroupent ensuite lorsqu'ils sont réinstallés ou utilisés par d'autres. Vous pouvez l'installer avec.

$ pip freeze > requirements.txt
$ pip install -r requirements.txt

Le résultat de «pip freeze» n'est pas seulement le paquet qui était «pip install», mais aussi les paquets dépendants sont également répertoriés. De plus, la version de chaque paquet est également incluse et vous pouvez créer exactement le même environnement que lorsque vous l'avez installé avec pip install -r. Je pense que de nombreux autres outils l'appellent un fichier de verrouillage, mais dans le cas de pip, cela s'appelle "freeze".

C'est bien que tous les packages soient répertoriés dans le sens où ils reproduisent le même environnement, mais si vous regardez cela, vous ne pouvez pas dire lequel vous avez installé et lequel a été extrait par la dépendance. Lorsque vous désinstallez un package, vous pouvez supprimer ce que vous `` installez '', mais il est difficile de le supprimer à moins de savoir quel package il a extrait. Un autre problème est que même si les packages dépendants ont des corrections de bogues, ils continueront à utiliser l'ancienne version. C'est donc un outil qui sera présenté dans le prochain chapitre.

pip-chill

Il existe un outil appelé pip-chill en tant qu'outil pour compenser les inconvénients de «pip freeze». Contrairement à «pip freeze», il n'est pas intégré à pip et doit être installé séparément.

$ pip install pip-chill

Vous pouvez maintenant utiliser pip-chill. Si vous l'exécutez sans argument, il ressemblera à ceci.

$ pip-chill
pandas==1.1.4
pip-chill==1.0.0
requests==2.25.0

Similaire à pip freeze, mais ne montre que les packages que vous avez installés. C'est pratique car vous pouvez voir en un coup d'œil lorsque vous demandez "qu'avez-vous installé?"

Le fait que «pip-chill» soit sur cette liste est un défaut dans la balle, et dans le podcast, Brian a dit: «J'aurais aimé avoir la possibilité de cacher pip-chill lui-même de la liste. , Pip-chill | grep -v pip-chill peut être évité pour le moment.

pip-chill a plusieurs options, par exemple --no-version affichera uniquement le nom du paquet.

$ pip-chill --no-version
pandas
pip-chill
requests

Par exemple, au stade du développement, je ne pense pas qu'il soit nécessaire de spécifier la version en détail, donc je pense qu'il est possible de mettre cela dans requirements.txt. Vous pouvez facilement le retirer lorsque vous n'en avez pas besoin en cours de route, ou essayer plusieurs packages avec des fonctions similaires. Donc, après le test, tout va bien! Si cela devient, pip freeze> requirements.txt et corrigez-le en incluant les packages dépendants.

Il existe une autre option utile que vous pouvez utiliser pour obtenir cette sortie.

$ pip-chill -v
pandas==1.1.4
pip-chill==1.0.0
requests==2.25.0
# certifi==2020.11.8 # Installed as dependency for requests
# chardet==3.0.4 # Installed as dependency for requests
# idna==2.10 # Installed as dependency for requests
# numpy==1.19.4 # Installed as dependency for pandas
# python-dateutil==2.8.1 # Installed as dependency for pandas
# pytz==2020.4 # Installed as dependency for pandas
# six==1.15.0 # Installed as dependency for python-dateutil
# urllib3==1.26.2 # Installed as dependency for requests

Après la sortie normale, une liste des packages installés en tant que dépendances est alignée sous forme de commentaires, et elle donne des informations sur "quel package dépend de". Non, je voulais quelque chose comme ça.

De plus, -a affichera tous les paquets (c'est-à-dire le même que pip freeze).

De plus, pip-chill ne se souvient pas et ne traite pas l'historique de pip install, mais affiche" celui dont personne n'a de dépendance (c'est-à-dire celui qui aurait été installé manuellement) ". Je fais juste ça. Il est bon de réaliser ce que vous voulez faire avec un mécanisme simple. Cependant, à cause d'un tel mécanisme, par exemple, si vous désinstallez les pandas de l'état ci-dessus, ce sera comme ça.

$ pip uninstall pandas
$ pip-chill
numpy==1.19.4
pip-chill==1.0.0
python-dateutil==2.8.1
pytz==2020.4
requests==2.25.0

De toute évidence, les pandas ont disparu, donc numpy, python-dateutil et pytz, qui en dépendaient, sont répertoriés ci-dessus. Ce serait encore plus pratique si vous pouviez les effacer ensemble lorsque vous effaciez les pandas.

De plus, «Chill» signifie «refroidir». En japonais, le réfrigérateur a une fonction appelée «réfrigéré», qui est à l'origine du mot (?). Je ne vais pas à Freeze, mais je pense que c'est un bon nom car on a l'impression que ça refroidit jusqu'à ce point.

Sommaire

J'ai essayé d'utiliser un outil appelé pip-chill. Il fait ce que je me demandais si pip freeze n'a pas cette fonctionnalité. Je me demande s'il sera importé un jour dans pip ...

Recommended Posts

Facilitons un peu la gestion des dépendances avec pip
Faisons une interface graphique avec python.
Faisons une rupture de bloc avec wxPython
Rendre la compilation C un peu plus facile
Faisons un graphe avec python! !!
Faisons un spacon avec xCAT
Faisons la voix lentement avec Python
Créez un framework Web avec Python! (1)
Faisons une IA à trois yeux avec Pylearn 2
Faisons un bot Twitter avec Python!
Créez un framework Web avec Python! (2)
Remplaçons UWSC par Python (5) Faisons un robot
[Jouons avec Python] Créer un livre de comptes de ménage
Essayez de créer un jeu simple avec Python 3 et iPhone
Créons une application Mac avec Tkinter et py2app
Essayez de créer une grille sphérique avec Rhinoceros / Grasshopper / GHPython
[Super facile] Faisons un LINE BOT avec Python.
Faisons un robot Discord.
Faisons Othello avec wxPython
Faites une loterie avec Python
Un peu coincé dans le chainer
Faire un feu avec kdeplot
Créons un client de socket Web avec Python. (Authentification par jeton d'accès)
Faisons un diagramme sur lequel on peut cliquer avec IPython
Faisons une rumba distante [Matériel]
Écrire la mesure du temps de traitement un peu plus facilement en utilisant la clause with
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 1
Faisons une rumba distante [Logiciel]
Faites un son avec le notebook Jupyter
Faisons un ordinateur de vélo avec Raspberry Pi Zero (W, WH)
Faisons un service de vente au comptant 2
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 2
Faisons un service de vente au comptant 1
Faisons l'IA d'Othello avec Chainer-Part 1-
Créer un système de recommandation avec python
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 3
Créer un filtre avec un modèle django
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 4
Faisons l'IA d'Othello avec Chainer-Part 2-
Créer un itérateur de modèle avec PySide
Faire un joli graphique avec plotly
Faisons une discussion WEB en utilisant WebSocket avec AWS sans serveur (Python)!
Faisons un service de vente au comptant 3
[Ev3dev] Faisons un programme de contrôle à distance par Python avec le protocole RPyC
J'ai créé un outil qui facilite un peu la décompression avec CLI (Python3)
Créer un lecteur vidéo avec PySimpleGUI + OpenCV
À propos de la gestion des packages avec conda et pip
Installation de Python et gestion des packages avec pip
Créons un groupe gratuit avec Python
Créez un simulateur de gacha rare avec Flask
Créez un pipeline de notebook avec Kedro + Papermill
Faire une figure partiellement zoomée avec matplotlib
Raclons un site dynamique avec Docker
Créez un quiz de dessin avec kivy + PyTorch
Facilitez la soumission de pypy avec atcoder-cli (python)
Créez un classificateur en cascade avec Google Colaboratory
[Python] Rendons matplotlib compatible avec le japonais
Une solution de contournement lors de l'installation de pyAudio avec pip.