Cela fait environ six mois que j'ai découvert «Pipenv» et que j'ai commencé à l'utiliser. Je vais résumer ce que j'ai trouvé pratique.
Pour faire simple, «Pipenv» est pratique, donc tout le monde devrait l'essayer.
Jusqu'à ce que je découvre l'existence de «Pipenv», j'ai utilisé «venv» pour créer un environnement virtuel et je l'ai géré en installant les modules décrits dans «requirements.txt» avec «pip».
requirements.txt
requests==2.22.0
Préparez un tel fichier
$ python3 -m venv venv
$ ./venv/bin/python -m pip install -r requirements.txt
Collecting requests==2.22.0 (from -r requirements.txt (line 1))
Using cached https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl
Collecting idna<2.9,>=2.5 (from requests==2.22.0->-r requirements.txt (line 1))
Using cached https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests==2.22.0->-r requirements.txt (line 1))
Using cached https://files.pythonhosted.org/packages/b9/63/df50cac98ea0d5b006c55a399c3bf1db9da7b5a24de7890bc9cfd5dd9e99/certifi-2019.11.28-py2.py3-none-any.whl
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests==2.22.0->-r requirements.txt (line 1))
Using cached https://files.pythonhosted.org/packages/b4/40/a9837291310ee1ccc242ceb6ebfd9eb21539649f193a7c8c86ba15b98539/urllib3-1.25.7-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests==2.22.0->-r requirements.txt (line 1))
Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
Installing collected packages: idna, certifi, urllib3, chardet, requests
Successfully installed certifi-2019.11.28 chardet-3.0.4 idna-2.8 requests-2.22.0 urllib3-1.25.7
Quelque chose comme ça.
Pour exécuter du code dans cet environnement, soit source. / Venv / bin / activate
, soit spécifiez directement. / Venv / bin / python
.
Il y avait quelques problèmes avec la gestion des modules jusqu'à présent.
requirements.txt
requests==2.22.0
Au début, je craignais que la version du module dépendant ne puisse être corrigée avec cette façon d'écrire requirements.txt
.
Cependant, la commande pip
a une sous-commande appelée freeze
, qui affiche tous les modules actuellement installés dans un format qui peut être décrit dans requirements.txt
.
En conséquence, mon requirements.txt
ressemble à ceci.
requirements.txt
certifi==2019.11.28
chardet==3.0.4
idna==2.8
pkg-resources==0.0.0
requests==2.22.0
urllib3==1.25.7
Vous pouvez maintenant spécifier la version de tous les modules dépendants! Mais le gros problème ici est
** Je ne connais pas du tout les dépendances du module **
Comme je l'expliquerai plus tard, à cet égard, je suis devenu un organisme dont «Pipenv» ne peut pas se séparer.
Le requirements.txt
actuel répertorie juste tous les modules installés, donc je ne connais pas les dépendances de chacun.
De plus, selon le projet, les fichiers peuvent être séparés en dev-requirements.txt
et build-requirements.txt
(comme ce fut le cas avec le projet que je développe).
J'ai eu du mal à donner une version du module. Je ne sais pas de quel package il dépend, donc je l'ai installé dans un autre environnement et vérifié les packages dépendants.
Jusqu'à ce que je crée l'environnement virtuel et exécute le code, j'ai suivi les étapes suivantes:
$ python3 -m venv venv #Créer un environnement virtuel
$ ./venv/bin/pip install -U setuptools pip wheel #Mettez à jour le module de base avec la dernière version
$ ./venv/bin/pip install -r requirements.txt #Installation des modules requis
$ ./venv/bin/python main.py #Exécution de code dans un environnement virtuel
Quoi! Ce serait bien de conserver l'environnement venv une fois créé, mais ce n'est pas le cas.
J'utilise Makefile
pour rendre cela possible avec une seule commande.
Makefile
venv:
python3 -m venv venv
./venv/bin/pip install -U setuptools pip wheel
./venv/bin/pip install -r requirements.txt
.PHONY: run
run:
${MAKE} venv
./venv/bin/python main.py
Vous pouvez maintenant exécuter votre code à tout moment avec make run
.
Un jour, j'ai rencontré «Pipenv». .. ..
https://pipenv-ja.readthedocs.io/ja/translate-ja/
La documentation officielle de Pipenv
est très bonne. C'est japonais et facile à lire.
Personnellement, cela a été d'une grande aide.
Vous pouvez voir la fonction de Pipenv
en consultant la documentation officielle.
Ici, essayez d'utiliser Pipenv
et utilisez la méthode de gestion jusqu'à présent.
Voici quelques-unes des fonctionnalités que j'ai trouvées utiles.
Il n'est pas exagéré de dire que j'ai écrit cet article parce que je voulais le dire.
Bien que cela ne soit pas mentionné en détail ici, Pipenv
gère les modules dans un fichier appelé Pipfile
au lieu de requirements.txt
.
Ce fichier est généré automatiquement lorsque vous exécutez la commande pipenv
, vous n'aurez donc peut-être pas la possibilité de le modifier directement.
Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
requests = "==2.22.0"
[requires]
python_version = "3.6"
Maintenant, essayez d'exécuter la commande pipenv graph
.
$ pipenv graph
requests==2.22.0
- certifi [required: >=2017.4.17, installed: 2019.11.28]
- chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
- idna [required: >=2.5,<2.9, installed: 2.8]
- urllib3 [required: >=1.21.1,<1.26,!=1.25.1,!=1.25.0, installed: 1.25.7]
** Non seulement vous pouvez vérifier les modules installés, mais vous pouvez également voir les dépendances de chacun. ** ** Cela a été personnellement très apprécié.
Comme vous pouvez voir la version requise pour chaque module, vous n'avez pas à vérifier les dépendances à chaque fois que vous souhaitez modifier la version.
Lorsque vous utilisez Pipenv
, vous pouvez créer un environnement virtuel → installer les modules nécessaires → exécuter du code dans l'environnement virtuel avec la commande suivante.
$ pipenv install #Créer un environnement virtuel+Installation des modules requis
$ pipenv run python main.py #Principal dans un environnement virtuel.Exécuter py
Le nombre de commandes est clairement réduit par rapport à la procédure introduite dans [Troublesome to execute code](#Troublesome pour exécuter du code).
Avec ce montant, vous n'avez pas à vous soucier d'utiliser Makefile
.
En définissant une section appelée «scripts» dans «Pipfile», vous pouvez définir des instructions fréquemment exécutées comme des commandes. Cliquez ici pour plus de détails (https://pipenv-ja.readthedocs.io/ja/translate-ja/advanced.html#custom-script-shortcuts) (Officiel)
Par exemple, le Pipfile
qui définit la commande pour exécuter le test est le suivant.
Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
pytest = "==5.3.1"
[packages]
requests = "==2.22.0"
[requires]
python_version = "3.6"
[scripts]
test = "python -m pytest tests/"
Une section appelée «[scripts]» a été ajoutée.
Il vous permet de définir des sous-commandes qui suivent la commande pipenv run
, auquel cas le test pipenv run
exécutera le test avec le pytest
.
Les commandes fréquemment utilisées telles que l'exécution de test et l'empaquetage ont été décrites dans Makefile
, mais si vous l'utilisez, vous n'avez besoin que d'un Pipfile
pour exécuter du code simple.
Lorsque vous exécutez le code avec pipenv run
, il chargera automatiquement le fichier .env
.
Cliquez ici pour plus de détails (https://pipenv-ja.readthedocs.io/ja/translate-ja/advanced.html#automatic-loading-of-env) (Officiel)
C'est aussi sobre.
J'utilise cette fonction comme un fichier de configuration. Écrivez la valeur dans le fichier «.env» au format «clé = valeur» afin que le code lise la valeur de la variable d'environnement.
.env
KEY=VALUE
main.py
import os
key = os.environ.get("KEY")
print(key) # VALUE
Tout comme le fichier de paramètres, éditer simplement le fichier dans .env
changera le résultat de l'exécution.
$ pipenv run python main.py
VALUE
Si l'échelle du code devient grande, il est préférable de créer un mécanisme pour lire correctement le fichier de paramétrage,
Cette fonction est très utile car il est difficile d'écrire le code pour lire le fichier de paramètres en utilisant ConfigParser
etc. pour le petit code.
Si vous utilisez Python
et que vous n'avez jamais entendu parler de Pipenv
, essayez-le.
Recommended Posts