[Compris dans la figure] Gestion de l'environnement virtuel Python par Pipenv

Je n'ai pas vraiment compris comment utiliser Pipenv, c'est donc un mémo lorsque j'ai essayé différents mouvements en lisant principalement le document officiel.

Puisque la relation entre chaque commande est illustrée, je l'écrirai dans ce flux. Les numéros de la figure correspondent aux numéros des paragraphes de cet article.

スクリーンショット 2020-01-01 20.10.48.png

Pipenv

Dans le passé, les environnements virtuels Python étaient souvent construits avec pip et verticalenv, mais Pipenv est un outil qui permet de les gérer facilement tous ensemble.

Pipfile et Pipfile.lock

Pipenv générera deux fichiers. En gros, vous ne les modifiez pas directement, mais je supprimerai chaque rôle afin de comprendre la raison et l'état de l'environnement virtuel. Chaque fichier a les rôles et propriétés suivants.

Pipfile

Pipfile.lock

Jetons un coup d'œil à chaque commande et comment l'utiliser.

0. Préparation

Installez Pipenv.

$ brew install pipenv

Il peut également être installé avec pip.

$ pip install pipenv

Initialisez l'environnement virtuel en spécifiant la version Python. Si la version spécifiée n'existe pas, elle sera installée via pyenv.

$ pipenv --python 3.6

Lorsque l'environnement virtuel est initialisé, un fichier appelé Pipfile est généré.

  1. install

Vous pouvez installer le package avec la commande install.

Utiliser Pipfile ou Pipfile.lock existant

S'il y a des fichiers Pipfile et Pipfile.lock dans la même hiérarchie où la commande est exécutée, l'environnement sera construit en faisant référence à ces fichiers.

$ pipenv install

Utiliser les exigences existantes.txt

Vous pouvez créer un environnement géré par Piprnv à partir de requirements.txt même s'il n'est pas géré à l'origine par Pipenv.

$ pipenv install -r ./requirements.txt

Construisez un nouvel environnement

S'il n'y a pas de fichier de référence, l'environnement sera construit de la même manière que pipenv --python <version>.

$ pipenv install --python 3.6

Pour la commande d'installation, un fichier Pipfile.lock est généré en plus du Pipfile. Jetons un coup d'œil au contenu.

Pipfile


[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]             //Vide car je n'ai pas encore installé le package

[requires]
python_version = "3.6" //Version 3.6 est spécifié

Pipfile.lock


{
    "_meta": {
        "hash": {
            "sha256": "415dfdcb118dd9bdfef17671cb7dcd78dbd69b6ae7d4f39e8b44e71d60ca72e7"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.6"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {}, //Vide car je n'ai pas encore installé le package
    "develop": {} 
}

Ajouter un package

J'ajouterai des pandas à titre d'essai.

$ pipenv install pandas

Ensuite, chacun sera ajouté comme suit.

Pipfile


[packages]
pandas = "*" //Aucune version spécifiée

Pipfile.lock


    "default": {
        "numpy": {
            "hashes": [
                "sha256:03bbde29ac8fba860bb2c53a1525b3604a9b60417855ac3119d89868ec6041c3",
(Omis)
                "sha256:f6a7421da632fc01e8a3ecd19c3f7350258d82501a646747664bae9c6a87c731"
            ],
            "version": "==1.18.0"
        },
        "pandas": {
            "hashes": [
                "sha256:00dff3a8e337f5ed7ad295d98a31821d3d0fe7792da82d78d7fd79b89c03ea9d",
(Omis)
                "sha256:ee50c2142cdcf41995655d499a157d0a812fce55c97d9aad13bc1eef837ed36c"
            ],
            "index": "pypi",
            "version": "==0.25.3"
        },
        "python-dateutil": {
            "hashes": [
                "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c",
                "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"
            ],
            "version": "==2.8.1"
        },
        "pytz": {
            "hashes": [
                "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d",
                "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"
            ],
            "version": "==2019.3"
        },
        "six": {
            "hashes": [
                "sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd",
                "sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66"
            ],
            "version": "==1.13.0"
        }
    },

Il spécifie également les packages et les versions dont pandas dépend en interne, tels que numpy et python-dateutil.

Si vous souhaitez spécifier la version et l'installer, procédez comme suit.

$ pipenv install pandas==0.15.0 //Spécifiez une version spécifique

La méthode de spécification de la version n'est pas limitée à la version spécifique, mais il est possible d'exclure la version spécifiée ou supérieure et la version spécifique. Pour plus de détails, veuillez vous référer au Document officiel.

Retirer le paquet

Utilisez la commande de désinstallation pour désinstaller le package installé.

$ pipenv uninstall pandas

Ensuite, Pipfile et Pipfile.lock seront supprimés comme ajoutés par l'installation.

  1. lock

Utilisez la commande lock pour mettre à jour le fichier Pipfile.lock à partir du contenu du Pipfile.

$ pipenv lock

En particulier, si vous ne spécifiez pas la version lorsque pipenv install, vous utiliserez cette commande lors de la mise à jour du paquet.

  1. sync

La commande sync est utilisée pour appliquer le contenu de Pipfile.lock à un environnement virtuel.

$ pipenv sync

Je pense que cette commande est souvent utilisée comme un ensemble avec la commande lock.

  1. update

La commande update se verrouille et se synchronise en même temps.

$ pipenv update        //Faites pour tous les forfaits
$ pipenv update pandas //Il est également possible de spécifier le package

Ajoutez l'option --dry-run pour voir quels paquets peuvent être mis à jour (obsolètes).

$ pipenv update --dry-run
✔ Success! 
//Ancienne version (0.15.J'ai mis des pandas de 0), donc la nouvelle version (0).25.3) vous dira qu'il est disponible
Skipped Update of Package pandas: 0.15.0 installed, 0.25.3 available.

Si vous spécifiez la version au moment de pipenv install, l'installation de la nouvelle version sera ignorée même s'il n'y a pas d'option --dry-run. Dans ce cas, spécifiez une version arbitraire avec pipenv install et effectuez l'installation par écrasement.

  1. run

Utilisez la commande run pour exécuter des commandes dans un environnement virtuel. Affichons la liste des packages installés à titre d'essai.

$ pipenv run pip list
Package         Version
--------------- -------
numpy           1.18.0 
pandas          0.15.0 
pip             19.3.1 
python-dateutil 2.8.1  
pytz            2019.3 
setuptools      43.0.0 
six             1.13.0 
wheel           0.33.6

De plus, si vous enregistrez un script dans Pipfile, vous pouvez appeler ce script avec la commande run.

Pipfile


[scripts]
list = "pip list"
$ pipenv run list //Même résultat que pipenv run pip list
  1. shell

Utilisez la commande shell pour accéder à l'environnement virtuel.

$ pipenv shell
  1. clean

Si vous avez des packages dans votre environnement virtuel qui ne sont pas définis dans Pipfile.lock, vous pouvez les supprimer de l'environnement virtuel avec la commande clean.

Essayez pipenv uninstall pandas après pipenv install pandas, qui est sorti plus tôt, et exécutez la commande clean avec les paquets dont les pandas dépendent restent dans l'environnement virtuel.

$ pipenv run pip list 
Package         Version
--------------- -------
numpy           1.18.0 //Il existe encore des packages dont les pandas dépendent, comme numpy.
pip             19.3.1
python-dateutil 2.8.1  
pytz            2019.3 
setuptools      43.0.0 
six             1.13.0 
wheel           0.33.6 
$ pipenv clean //Courir propre
Uninstalling six…
Uninstalling pytz…
Uninstalling python-dateutil…
Uninstalling numpy…
$ pipenv run pip list //Vérifiez le résultat du nettoyage
Package    Version
---------- -------
pip        19.3.1 
setuptools 43.0.0 
wheel      0.33.6 

Vous pouvez voir que les paquets dont dépendaient les pandas sont également fermement désinstallés.

  1. check

La commande check vérifie les vulnérabilités de sécurité pour voir si l'environnement actuel répond aux exigences de PEP 508.

$ pipenv check
  1. graph

Si vous souhaitez voir les dépendances du package, utilisez la commande graph.

$ pipenv graph
pandas==0.15.0 //pandas est numpy, python-Il s'avère que cela dépend de dateutil et pytz
  - numpy [required: >=1.7.0, installed: 1.18.0]
  - python-dateutil [required: >=2, installed: 2.8.1]
    - six [required: >=1.5, installed: 1.13.0] // python-Il s'avère que dateutil est encore plus dépendant de six
  - pytz [required: >=2011k, installed: 2019.3]

Résumé

Je pense que cela vous donne une vue d'ensemble de Pipenv. C'est persistant, mais je posterai à nouveau le diagramme associé au début.

スクリーンショット 2020-01-01 20.10.48.png

Autres alternatives

Pipenv ressemble à toutes les bonnes choses, mais il semble avoir quelques inconvénients, tels que le fait d'être épicé lorsqu'il est combiné avec un docker et une installation lente. Comme autre alternative, je demanderai les noms des outils suivants, donc j'essaierai de les toucher bientôt.

Recommended Posts

[Compris dans la figure] Gestion de l'environnement virtuel Python par Pipenv
À propos de l'environnement virtuel de Python version 3.7
environnement virtuel python Pipenv
environnement virtuel en Python
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
venv: gestion de l'environnement virtuel Python
Comment développer dans un environnement virtuel Python [Memo]
Exécutez le fichier python après avoir activé l'environnement virtuel python avec le fichier de commandes
[Python] Comprendre le potentiel_field_planning de Python Robotics
Mémorandum de l'outil de gestion de paquets Python ez_setup
Lire la sortie standard d'un sous-processus ligne par ligne en Python
Installer Django dans l'environnement virtuel pipenv
[Comprendre en 3 minutes] Le début de Linux
Vérifiez le comportement du destroyer en Python
Le résultat de l'installation de python sur Anaconda
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
Principes de base pour exécuter NoxPlayer en Python
Pandas du débutant, par le débutant, pour le débutant [Python]
À la recherche du FizzBuzz le plus rapide en Python
Sortie du nombre de cœurs de processeur en Python
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Préparer l'environnement d'exécution de Python3 avec Docker
[Python] Obtenir / modifier l'étiquette d'échelle de la figure
Récupérer l'appelant d'une fonction en Python
Faites correspondre la distribution de chaque groupe en Python
Démarrez Django dans un environnement virtuel à l'aide de Pipenv
Afficher le résultat du traitement de la géométrie en Python
Créer un environnement virtuel avec conda avec Python
Copiez la liste en Python
Installez le package python dans un environnement hors ligne
Découvrez la fraction de la valeur saisie en python
Trouvez la solution de l'équation d'ordre n avec python
L'histoire de la lecture des données HSPICE en Python
Travaillez dans un environnement virtuel avec Python virtualenv.
[Note] À propos du rôle du trait de soulignement "_" en Python
Résolution d'équations de mouvement en Python (odeint)
[Python] Une compréhension approximative du module de journalisation
Sortie sous la forme d'un tableau python
Utiliser jupyter-lab installé dans l'environnement virtuel python (venv)
Rechercher par la valeur de l'instance dans la liste
J'ai installé Pygame avec Python 3.5.1 dans l'environnement de pyenv sur OS X
Divise la chaîne de caractères par le nombre de caractères spécifié. En Ruby et Python.
Obtenir l'heure Unix de l'heure spécifiée par JST quel que soit le fuseau horaire du serveur avec Python
Créer un projet et une application Django dans un environnement virtuel Python et démarrer le serveur
Obtenez le dernier élément du tableau en fractionnant les chaînes en Python et PHP
Trier la liste des tuples en Python en spécifiant l'ordre croissant / décroissant de plusieurs clés
Faire fonctionner mongoDB à partir de python dans l'environnement ubuntu ① Introduction de mongoDB
Comment obtenir le nombre de chiffres en Python
Autour de l'installation du framework de gestion de projet Python Trac
Unification de l'environnement Python
○○ Résolution de problèmes dans le département de mathématiques avec optimisation
[python] Récupère la liste des classes définies dans le module
le zen de Python
[Apprentissage automatique] "Détection d'anomalies et détection de changement" Dessinons la figure du chapitre 1 en Python.
L'histoire de FileNotFound en Python open () mode = 'w'
Utilisez CASA Toolkit dans votre propre environnement Python
Apprenez le modèle de conception «Chaîne de responsabilité» en Python
Implémenter la solution de l'algèbre de Riccati en Python