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.
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.
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