275 votes

Comment sont utilisés Pipfile et Pipfile.lock ?

Il semble que Pipfile/Pipfile.lock soient destinés à remplacer le fichier requirements.txt, dans le contexte du packaging Python. Cependant, il n'y a pas beaucoup de documentation sur la façon dont ils fonctionnent réellement. J'ai trouvé une description évolutive de pipfile sur la section PyPi du site web de Python aquí mais c'est assez confus et n'explique pas la sémantique des différentes sections du fichier.

Avez-vous des indications sur la façon de comprendre ces fichiers ?

3 votes

C'est un analogue direct de Gemfile y Gemfile.lock du monde Ruby : Le site .lock a des versions spécifiques pour chaque dépendance ; celui qui n'a pas cette extension n'a que les versions connues pour contrôler les humains. Cela dit, il est peut-être un peu prématuré de demander une explication sur quelque chose qui est encore en évolution et qui est loin d'être bien défini, et encore moins normalisé.

0 votes

(Et de la même manière, la différence entre Pipfile y requirements.txt est en grande partie que le premier essaie d'adopter des caractéristiques du monde Ruby, c'est-à-dire la possibilité de spécifier des ensembles de dépendances pour plusieurs environnements et avec des conditions/options/etc. dans un seul fichier).

3 votes

Il semble qu'il a déjà été déployé dans le dépôt Heroku "getting started with Python" ( github.com/heroku/python-getting-started.git ) donc qu'on le veuille ou non, on dirait que c'est une production.

316voto

Le concept derrière ces fichiers est simple et analogue à d'autres outils déjà existants, si vous avez une certaine familiarité avec le Bundler de Ruby ou le Npm de Node. Pipenv est à la fois un outil de gestion des paquets et des environnements virtuels qui utilise les fichiers Pipfile et Pipfile.lock pour atteindre ces objectifs.

Pipenv gère l'environnement virtuel pour vous d'une manière standard par défaut (plus besoin d'activer et de désactiver). Ci-dessous, quelques éléments de base pour vous aider à démarrer, vous en trouverez d'autres sur le site site web pipenv .

Pour commencer

Commencer à utiliser pipenv est facile, dans le dossier de votre projet tapez...

$ pipenv install

... et s'il a déjà un requirements.txt il générera un fichier Pipfile avec les exigences et un dossier d'environnement virtuel, sinon, il génèrera un fichier vide Pipfile fichier. Si vous n'aimez pas ou changez d'avis sur quelque chose que vous avez installé, tapez simplement...

$ pipenv uninstall <package>

... et c'est parti. Pour activer l'environnement virtuel que pipenv a déjà généré, allez avec...

$ pipenv shell

... et votre environnement virtuel sera activé. Pour quitter l'environnement...

$ exit

... et vous serez de retour à votre session de terminal d'origine.

Pipfile

Le site Pipfile est destiné à spécifier les exigences en matière de paquets pour votre application ou bibliothèque Python, tant au niveau du développement que de l'exécution. Vous pouvez installer un paquetage en utilisant simplement...

$ pipenv install flask

... et il sera ajouté comme dépendance pour le déploiement et l'exécution ou en utilisant ...

$ pipenv install --dev pytest

... et il sera utilisé comme dépendance pour le temps de développement. Dans les deux cas, si vous devez être plus précis sur la version du paquet, comme indiqué dans la section documentation pipenv utilise le même spécificateurs de version utilisé par pip. La syntaxe du fichier est assez simple, comme suit.

[[source]] # Here goes your package sources (where you are downloading your packages from).
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages] # Here goes your package requirements for running the application and its versions (which packages you will use when running the application).
requests = "*"
flask = "*"
pandas = "*"

[dev-packages] # Here goes your package requirements for developing the application and its versions (which packages you will use when developing the application)
pylint = "*"
wheel = "*"

[requires] # Here goes your required Python version.
python_version = "3.6"

Pipfile.lock

Le site Pipfile.lock est destiné à spécifier, sur la base des paquets présents dans Pipfile Vous pouvez ainsi éviter les risques de mise à jour automatique de paquets qui dépendent les uns des autres et de rupture de l'arbre de dépendance de votre projet.

Vous pouvez verrouiller vos paquets actuellement installés en utilisant...

$ pipenv lock

... et l'outil recherchera votre dossier d'environnement virtuel pour générer automatiquement le fichier de verrouillage pour vous, sur la base des versions actuellement installées. La syntaxe du fichier n'est pas aussi évidente que pour Pipfile Par conséquent, par souci de concision, nous ne l'afficherons pas ici.

0 votes

C'est une réponse intéressante, mais je pense que lorsque j'ai posé la question, je n'ai pas bien compris ce qu'on entendait réellement par [[source]] Est-ce la source des paquets qui sont téléchargés par pipenv ou quelque chose d'autre ? Je suppose que le reste des deux fichiers est assez évident.

0 votes

@Stephen, lorsque vous utilisez des gestionnaires de paquets tels que dnf, npm et pip, le gestionnaire de paquets doit savoir d'où il va tirer les paquets dont vous avez besoin, c'est-à-dire la source. Sur python, par défaut, nous pouvons utiliser PyPI avec pip, mais nous pouvons aussi avoir un serveur de paquets sur place (par exemple une installation de JFrog Artifactory), ainsi nous pouvons avoir plusieurs sources de paquets d'où nous tirons. Au fait, PyPI vient de mettre à jour son interface, elle est géniale :)

0 votes

Attendez, pourquoi pytest et coverage seraient-ils dans [packages] au lieu de [dev-packages] ? Ne sont-ils pas utilisés par les développeurs, plutôt que par les utilisateurs ?

3voto

Joshua Kan Points 25

Comme expliqué ci-dessus par @Charles Duffy, c'est un analogue direct de Gemfile y Gemfile.lock du monde Ruby. Voir la référence ci-dessous pour plus de détails.

Référence : https://medium.com/never-hop-on-the-bandwagon/gemfile-and-gemfile-lock-in-ruby-65adc918b856

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X