Quels sont les équivalents Python du bundler Ruby / carton Perl?

93

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 execsous-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?

riywo
la source
4
Non, tous les utilisateurs de Python n'utilisent pas virtualenv. Personnellement, je n'en ai jamais eu besoin.
Fred Foo
Je ne suis pas au courant de quelque chose d' exactement comme le bundler Ruby (que je ne connaissais pas jusqu'à présent, BTW). Ce que j'utilise pour faire est d'utiliser à la fois virtualenv et pip et setuptools - ou distutils ou tout autre système de distribution que je trouve en premier dans Google :) Je suis également curieux de savoir une réponse mais c'est ma solution la plupart du temps.
brandizzi
pipenvet shovelmentionnés ci-dessous sont des choix plus modernes depuis que cette question a été posée.
Jim Meyer
Ni pipenv ni pelle ne sont équivalents. La pelle n'a rien à voir avec le bundler, mais plutôt un râteau. La gestion des dépendances Python est assez loin derrière. Il sera fusionné dans pip si une jours ( pypi.org/project/pipfile ) ...
Nomas Prime

Réponses:

72

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:

  1. Installation de packages (installation de gem)

    pip install mypackage
  2. 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:

    nose==1.1.2
    django<1.3
    PIL

    Plus tard, lorsque vous voudriez installer ces dépendances, vous feriez:

    $ pip install -r requirements.txt

    Un moyen simple de voir tous vos packages actuels dans la syntaxe du fichier d'exigences est de faire:

    $ pip freeze

    Vous pouvez en savoir plus ici .

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

    $ pip install gunicorn
    $ gunicorn -h 
  4. Gems de package pour l'installation à partir du cache (package bundler)

    Il y a pip bundleet pip 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.

Denys Shabalin
la source
46
La grande chose à propos de bundler est exactement que la partie virtualenv est intégrée et dans la plupart des cas aucun droit d'administrateur n'est requis. En fait, le bundle est peut-être le seul bijou dont on a besoin dans le monde. bundle install --path vendorinstalle tout localement et bundle execest suffisamment intelligent pour comprendre cela. Pas besoin de changements d'environnement explicites.
Debilski
11
Je ne pense pas que le point 3 soit correct. L'exécution d'un exécutable ruby ​​peut se faire avec ou sans bundle exec. L'intérêt de bundle execest qu'il modifie l'environnement Gemfileavant d'exécuter l'exécutable. Pip n'a pas d'équivalent bundle exec, bien que virtualenv puisse.
Sean Mackesey
@SeanMackesey chaque fois que vous exécutez activate de l'environnement virtualenv, vous devenez immédiatement à l'intérieur de l'environnement, par exemple, python pointe vers celui de l'environnement, pas celui installé globalement, pythonpath est correct par rapport à env, toutes les applications fonctionnent également à partir de cet env.
Denys Shabalin
8
La principale chose à propos du bundler est qu'il s'agit d'un standard de facto maintenant, vous pouvez à peu près garantir que TOUT projet ruby ​​de pratiquement n'importe quelle taille aura un Gemfilesiège dans sa racine, et vous pouvez bundle installet vous êtes prêt à partir, ou bundle --deploymentet 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.
ocodo
14

Vous pouvez utiliser pipenv , qui a une interface similaire avec le bundler.

$ pip install pipenv

Pipenv crée automatiquement virtualenv et installe les dépendances depuis Pipfileou Pipfile.lock.

$ pipenv --three           # Create virtualenv with Python3
$ pipenv install           # Install dependencies from Pipfile
$ pipenv install requests  # Install `requests` and update Pipfile
$ pipenv lock              # Generate `Pipfile.lock`
$ pipenv shell             # Run shell with virtualenv activated

Vous pouvez exécuter une commande avec une portée virtualenv comme bundle exec.

$ pipenv run python3 -c "print('hello!')"
nonylène
la source
3

Il y a un pbundler clone .

La version qui est actuellement dans pip lit simplement le requirements.txtfichier 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).

kousu
la source
Ce projet semble avoir disparu. Considérez la poésie: stackoverflow.com/a/61771381/115075
bb.
1

J'en ai écrit un - https://github.com/Deepwalker/pundler . Sur PIP sonpundle , le nom était déjà pris.

Il utilise des requirements(_\w+)?.txtfichiers 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.

Mihail Krivushin
la source
1

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

bb.
la source
1

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.

Jim Meyer
la source
0

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

Yonsy Solis
la source