Je connais virtualenv et pip. Mais ceux-ci sont un peu différents du bundler / carton.
Par exemple:
- pip écrit le chemin absolu vers shebang ou active le script
- pip n'a pas la
exec
sous-commande (bundle exec bar
) - virtualenv copie l'interpréteur Python dans un répertoire local
Chaque développeur Python utilise-t-il virtualenv / pip? Existe-t-il d'autres outils de gestion de packages pour Python?
pipenv
etshovel
mentionnés ci-dessous sont des choix plus modernes depuis que cette question a été posée.Réponses:
D'après ce que j'ai lu sur bundler - pip sans virtualenv devrait fonctionner parfaitement pour vous. Vous pouvez le considérer comme quelque chose entre la commande gem standard et le bundler. Choses courantes que vous pouvez faire avec pip:
Installation de packages (installation de gem)
Dépendances et installation en bloc (gemfile)
Le moyen le plus simple est probablement d'utiliser les fichiers requirements.txt de pip. Fondamentalement, il s'agit simplement d'une liste simple des packages requis avec des contraintes de version possibles. Cela pourrait ressembler à quelque chose comme:
Plus tard, lorsque vous voudriez installer ces dépendances, vous feriez:
Un moyen simple de voir tous vos packages actuels dans la syntaxe du fichier d'exigences est de faire:
Vous pouvez en savoir plus ici .
Exécution (bundler exec)
Tous les packages python fournis avec les fichiers exécutables sont généralement directement disponibles après l'installation (à moins que vous n'ayez une configuration personnalisée ou qu'il s'agisse d'un package spécial). Par exemple:
Gems de package pour l'installation à partir du cache (package bundler)
Il y a
pip bundle
etpip zip/unzip
. Mais je ne sais pas si beaucoup de gens l'utilisent.ps Si vous vous souciez de l'isolation de l'environnement, vous pouvez également utiliser virtualenv avec pip (ils sont des amis proches et travaillent parfaitement ensemble). Par défaut, pip installe des packages à l'échelle du système qui peuvent nécessiter des droits d'administrateur.
la source
bundle install --path vendor
installe tout localement etbundle exec
est suffisamment intelligent pour comprendre cela. Pas besoin de changements d'environnement explicites.bundle exec
. L'intérêt debundle exec
est qu'il modifie l'environnementGemfile
avant d'exécuter l'exécutable. Pip n'a pas d'équivalentbundle exec
, bien que virtualenv puisse.Gemfile
siège dans sa racine, et vous pouvezbundle install
et vous êtes prêt à partir, oubundle --deployment
et cela ' ll ne sera exécuté que sur un serveur avec peu de choses à faire à condition que la machine dispose de la version requise de ruby. Python n'a tout simplement pas d'équivalent. Les outils sont là, l'ubiquité culturelle ne l'est pas.Vous pouvez utiliser pipenv , qui a une interface similaire avec le bundler.
Pipenv crée automatiquement virtualenv et installe les dépendances depuis
Pipfile
ouPipfile.lock
.Vous pouvez exécuter une commande avec une portée virtualenv comme
bundle exec
.la source
Il y a un pbundler clone .
La version qui est actuellement dans pip lit simplement le
requirements.txt
fichier que vous avez déjà, mais est beaucoup plus à jour. Ce n'est pas non plus totalement équivalent: il insiste pour faire unvirtualenv
. Bundler, je remarque, n'installe que les paquets manquants et vous donne la possibilité de donner votre mot de passe sudo à installer dans vos répertoires système ou de redémarrer, ce qui ne semble pas être une fonctionnalité de pbundler.Cependant, la version sur git est une réécriture presque complète pour être beaucoup plus proche du comportement de Bundler ... y compris avoir un "Cheesefile" et maintenant ne supporte pas requirements.txt. C'est malheureux, car requirements.txt est la norme de facto dans pythonland, et il y a même un travail officiel estampillé BDFL pour le standardiser . Lorsque cela entrera en vigueur, vous pouvez être sûr que quelque chose comme pbundler deviendra la norme de facto. Hélas, rien encore tout à fait stable que je sache (mais j'aime à prouver mal).
la source
J'en ai écrit un - https://github.com/Deepwalker/pundler . Sur PIP son
pundle
, le nom était déjà pris.Il utilise des
requirements(_\w+)?.txt
fichiers comme dépendances souhaitées et créefrozen(_\w+)?.txt
fichiers avec des versions figées.À propos de
(_\w+)?
chose - c'est envs. Vous pouvez créer requirements_test.txt puis utiliserPUNDLEENV=test
pour utiliser ce deps dans votre exécution avec ceux de requirements.txt à côté.Et à propos de virtualenv - vous n'en avez pas besoin, c'est ce que pundle prend du bundler en première tête.
la source
Python Poetry est le plus proche du bundler Ruby à partir de 2020 (et déjà depuis 2018). Il a déjà plus de deux ans, toujours très actif, a une excellente documentation. On pourrait se plaindre du fait que
curl-pipe-python
-style est la méthode d'installation recommandée, mais il existe des alternatives, par exemple l'homebrew sur macOS.Il utilise des virtualenvs dans les coulisses (contrairement au bundler), mais il fournit et utilise un fichier de verrouillage, prend en charge les sous-dépendances, adhère aux contraintes de version spécifiées et permet la mise à jour automatique des packages obsolètes. Il y a même l'auto-complétion pour votre shell préféré.
Avec son utilisation d'un fichier pyproject.toml, il va également un peu plus loin que bundler (plus proche d'un gemspec. Il est également comparable aux npm et yarn de JavaScript et TypeScript).
Poétrifie (un projet complémentaire) permet de convertir des projets de requirements.txt en pyproject.toml pour Poetry.
Le fichier de verrouillage peut être exporté vers requirements.txt par
poetry export -f requirements.txt > requirements.txt
, si vous en avez besoin pour d'autres outils (ou dans le cas peu probable où vous souhaitez revenir en arrière).la source
Je dirais que Shovel vaut le coup d'œil. Il a été développé spécifiquement pour la version Pythonish de Rake. Il n'y a pas une tonne d'activité de commit sur le projet, mais semble stable et utile.
la source
Non, tous les développeurs n'utilisent pas virtualenv et / ou pip, mais de nombreux développeurs utilisent / préfèrent ces outils
Et maintenant, pour les outils de développement de paquets et les différents environnements, c'est votre vraie question. Existe tous les autres outils comme Buildout ( http://www.buildout.org/en/latest/ ) dans le même but, isolez votre système de build Python d'environnement pour chaque projet que vous gérez. Depuis quelque temps j'utilise ça, mais pas maintenant.
Les environnements indépendants par projet, en Python sont un peu différents de la même situation en Ruby. Dans mon cas, j'utilise pyenv ( https://github.com/yyuu/pyenv ) qui est quelque chose comme rbenv mais, pour Python. différentes versions de python et virtualenvs par projet, et, dans ces environnements isolés, je peux utiliser pip ou easy-install (si nécessaire).
la source