web-dev-qa-db-fra.com

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

Je connais virtualenv et pip. Mais ceux-ci sont un peu différents de bundler/carton.

Par exemple:

  • pip écrit le chemin absolu vers Shebang ou active le script
  • pip n'a pas la sous-commande exec (bundle exec bar)
  • virtualenv copie l'interpréteur Python dans un répertoire local

Est-ce que chaque développeur Python utilise virtualenv/pip? Existe-t-il d'autres outils de gestion de paquets pour Python?

87
riywo

D'après ce que j'ai lu à propos de bundler - pip sans virtualenv devrait fonctionner très bien pour vous. Vous pouvez penser à cela comme quelque chose entre la commande normale de gemme et le bundler. Les choses courantes que vous pouvez faire avec pip:

  1. Installation de packages (gem install)

    pip install mypackage
    
  2. Dépendances et installation en masse (gemfile)

    Le moyen le plus simple consiste probablement à utiliser les fichiers Requirements.txt de pip. En gros, il ne s'agit que d'une simple liste de packages requis avec les contraintes de version possibles. Cela pourrait ressembler à quelque chose comme:

    nose==1.1.2
    Django<1.3
    PIL
    

    Plus tard, quand vous voudrez installer ces dépendances, vous ferez:

    $ pip install -r requirements.txt
    

    Un moyen simple de voir tous vos paquets actuels dans la syntaxe de fichier de conditions est de faire:

    $ pip freeze
    

    Vous pouvez en lire plus à ce sujet ici .

  3. Execution (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 un package spécial). Par exemple:

    $ pip install gunicorn
    $ gunicorn -h 
    
  4. Paquet gems pour installer depuis le cache (paquet bundler)

    Il y a pip bundle et pip Zip/unzip. Mais je ne suis pas sûr si beaucoup de gens l'utilisent.

p.s. 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 les paquetages sur l'ensemble du système, ce qui peut nécessiter des droits d'administrateur. 

69
Denys Shabalin

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

$ pip install pipenv

Pipenv crée automatiquement virtualenv et installe des dépendances à partir de Pipfile ou 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 étendue virtualenv telle que bundle exec.

$ pipenv run python3 -c "print('hello!')"
12
nonylene

Il existe un clone pbundler

La version actuellement dans pip lit simplement le fichier requirements.txt que vous avez déjà, mais est beaucoup obsolète. Ce n'est pas non plus totalement équivalent: il insiste pour créer une variable virtualenv. Je remarque que Bundler n’installe que les paquets manquants et vous donne la possibilité de donner votre mot de passe Sudo à installer dans votre répertoire système ou de le 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 ne supporte pas maintenant les exigences.txt. Cela est regrettable, car Requirements.txt est le standard de facto en pythonland et il existe même un travail officiel estampillé BDFL visant à le standardiser . Quand cela entrera en vigueur, vous pouvez être assuré que quelque chose comme pbundler deviendra la norme de facto. Hélas, rien d’assez stable à ce que je sache (mais j’aimerais aimer me tromper).

4
kousu

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

Il utilise les fichiers requirements(_\w+)?.txt comme dépendances souhaitées et crée des fichiers frozen(_\w+)?.txt avec des versions gelées.

À propos de (_\w+)? chose - c’est envs. Vous pouvez créer Requirements_test.txt, puis utiliser PUNDLEENV=test pour utiliser ces dépendances dans votre exécution avec celles de Requirements.txt.

Et à propos de virtualenv - vous n’avez pas besoin d’un seul logiciel, c’est ce que le pundle prend en premier.

1
Mihail Krivushin

Je dirais que Pelle vaut le coup d'oeil. Il a été développé spécifiquement pour la version Pythonish de Rake. Il n'y a pas une tonne d'activité de validation sur le projet, mais semble stable et utile.

1
Jim Meyer

Non, non, tous les développeurs utilisent virtualenv et/ou pip, mais de nombreux développeurs utilisent/préfèrent ces outils.

Et maintenant, votre vraie question concerne les outils de développement de paquets et les différents environnements. Si d'autres outils tels que Buildout ( http://www.buildout.org/en/latest/ ) existent dans le même but, isolez votre système de génération Python pour chaque projet que vous gérez. Depuis quelque temps, je l'utilise, 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 ressemble à rbenv mais, pour Python. Différentes versions de python et de virtualenvs par projet et, dans cet environnement isolé, je peux utiliser pip ou easy-install (si nécessaire).

0
Yonsy Solis