Які еквіваленти Python в упаковці Ruby / Perl's?


93

Я знаю про virtualenv та pip. Але вони дещо відрізняються від пакувальних / коробкових.

Наприклад:

  • pip пише абсолютний шлях до shebang або активувати сценарій
  • pip не має execпідкоманди ( bundle exec bar)
  • virtualenv копіює інтерпретатора Python у локальний каталог

Чи кожен розробник Python використовує virtualenv / pip? Чи є інші інструменти управління пакетами для Python?


4
Ні, не кожен користувач Python використовує virtualenv. Мені особисто це ніколи не було потрібно.
Фред Фоо

Мені невідомо щось саме на кшталт бункера Ruby (якого я до цього часу не знав, BTW). Те, що я роблю, - це використовувати як virtualenv, так і pip та setuptools - або distutils або будь-яку систему дистрибуції, яку я спочатку знаходжу в Google :) Мені цікаво відповідь, але це рішення є моєю більшістю часу.
brandizzi

pipenvі shovelзгадане нижче - це більш сучасний вибір, оскільки це питання було задано.
Джим Мейєр

Ні пипенв, ні лопата не рівноцінні. Лопата не схожа на розпусник, більше схожа на граблі. Управління залежністю від Python значно відстає. Це буде об'єднано в один піп день , хоча ( pypi.org/project/pipfile ) ...
Nomas Prime

Відповіді:


72

З того, що я читав про bundler - pip без virtualenv повинен працювати для вас просто чудово. Ви можете вважати це як щось середнє між звичайними командами дорогоцінних каменів і bundler. Загальні речі, які ви можете зробити з піп:

  1. Встановлення пакетів (встановлення дорогоцінного каміння)

    pip install mypackage
  2. Залежності та масове встановлення (gemfile)

    Мабуть, найпростіший спосіб - це використовувати файли вимог pxt pip. В основному це лише звичайний список необхідних пакетів з можливими обмеженнями версій. Це може виглядати приблизно так:

    nose==1.1.2
    django<1.3
    PIL

    Пізніше, коли ви хочете встановити ці залежності, ви зробите:

    $ pip install -r requirements.txt

    Простий спосіб переглянути всі ваші поточні пакети в синтаксисі файлу вимог:

    $ pip freeze

    Більше про це можна прочитати тут .

  3. Виконання (exec bundler)

    Всі пакети python, що постачаються з виконуваними файлами, зазвичай доступні безпосередньо після встановлення (якщо ви не маєте спеціальних налаштувань або це спеціальний пакет). Наприклад:

    $ pip install gunicorn
    $ gunicorn -h 
  4. Пакет дорогоцінних каменів для встановлення з кешу (пакет постачальника)

    Є pip bundleі pip zip/unzip. Але я не впевнений, чи багато людей цим користуються.

ps Якщо ви дбаєте про ізоляцію навколишнього середовища, ви також можете використовувати virtualenv разом з pip (вони є близькими друзями і прекрасно працюють разом). За замовчуванням pip встановлює пакети для всієї системи, які можуть зажадати прав адміністратора.


46
Чудова річ у постачальнику - саме те, що частина virtualenv інтегрована, і в більшості випадків права адміністратора не потрібні. Насправді, пакет може бути єдиним дорогоцінним каменем, який потрібен у всьому світі. bundle install --path vendorвстановлює все локально і bundle execдосить розумний, щоб зрозуміти це. Немає необхідності в явних змінах середовища.
Дебільські

11
Я не думаю, що пункт №3 є правильним. Просто запустити рубіновий виконуваний файл можна з або без bundle exec. Вся справа в bundle execтому, що вона змінює середовище відповідно до Gemfileпопереднього запуску виконуваного файлу. Піп не має еквіваленту bundle exec, хоча і virtualenv міг би.
Шон Макей

@SeanMackesey кожного разу, коли ви запускаєте активацію середовища virtualenv, ви негайно потрапляєте всередину середовища, наприклад, python вказує на той, що знаходиться в env, глобально не встановлений, pythonpath правильний щодо env, усі додатки також запускаються з цієї env.
Денис Шабалін

8
Головне в патенті - це стандарт дефакто зараз, ви можете майже гарантувати, що будь-який рубіновий проект практично будь-якого розміру, матиме місце Gemfileв його корені, і ви можете, bundle installі ви готові йти, або bundle --deploymentі це " Будемо просто запускати на сервері ще мало чого, якщо машина має на ньому необхідну версію рубіну. У Python просто немає еквівалента. Інструменти є, культурної повсюди немає.
окудо

14

Можна використовувати pipenv , який має аналогічний інтерфейс з bundler.

$ pip install pipenv

Pipenv створює virtualenv автоматично та встановлює залежності від Pipfileабо 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

Ви можете запускати команди з virtualenv сферою на зразок bundle exec.

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

3

Є клонівський грабіжник .

Версія, яка наразі знаходиться в pip, просто читає requirements.txtфайл, який у вас уже є, але значно застаріла. Це також не зовсім рівнозначно: він наполягає на тому, щоб зробити а virtualenv. Зауважую, Bundler встановлює лише те, що відсутні пакети, і дає вам можливість надати свій пароль sudo для встановлення у ваші системні режими або перезавантаження, що, здається, не є функцією pbundler.

Однак версія на git - це майже повне перезапис, щоб бути набагато ближчим до поведінки Bundler ... включаючи наявність "Cheesefile" і тепер не підтримуючої вимоги.txt. Це прикро, оскільки вимоги.txt є фактичним стандартом в pythonland, і навіть існує офіційна робота з штампом BDFL для його стандартизації . Коли це набуде чинності, ви можете бути впевнені, що щось на кшталт pbundler стане стандартним фактором. На жаль, нічого досить стабільним ще , що я не знаю (але я люблю бути спростовано).


Цей проект, схоже, зник. Розглянемо поезію: stackoverflow.com/a/61771381/115075
bb.

1

Я написав один - https://github.com/Deepwalker/pundler . На PIP його pundleназва вже була взята.

Він використовує requirements(_\w+)?.txtфайли як потрібні залежності та створює frozen(_\w+)?.txtфайли із замороженими версіями.

Про (_\w+)?річ - це загравання. Ви можете створити вимоги_test.txt, а потім використати PUNDLEENV=testдля використання цих деп-файлів у вашому запуску з вимогами.txt поруч.

А щодо virtualenv - вам потрібна не одна, її те, що каламбур бере у пачки в першій голові.


1

Я б сказав, що Лопата варто подивитися. Він був розроблений спеціально для пітоністської версії граблі. На проекті немає жодної активності, але здається стабільною та корисною.


1

Python Poetry є найближчим до Buy Bundler станом на 2020 рік (і вже з 2018 року). Це вже більше двох років, ще дуже активний, має чудову документацію. Можна поскаржитися на те, що curl-pipe-python-style є рекомендованим способом встановлення, але є альтернативи, наприклад, домашня мова на macOS.

Він використовує virtualenvs за лаштунками (на відміну від bundler), але надає та використовує файл блокування, піклується про підзалежні залежності, дотримується визначених обмежень версій та дозволяє автоматично оновлювати застарілі пакети. Існує навіть автодоповнення для вашої улюбленої оболонки.

Завдяки використанню файлу pyproject.toml він також йде трохи далі, ніж bundler (ближче до gemspec. Це також можна порівняти з npm та пряжі JavaScript і TypeScript).

Poetrify (доповнює проект) допомагає перетворити проекти з вимог.txt в pyproject.toml для поезії.

Файл блокування можна експортувати до вимог.txt poetry export -f requirements.txt > requirements.txt, якщо вам це потрібно для інших інструментів (або навряд чи ви хочете повернутися назад).


0

Ні, не всі розробники використовують virtualenv та / або pip, але багато розробників використовують / віддають перевагу цим інструментам

А тепер щодо інструментів розробки пакетів та різних середовищ - це ваше справжнє питання. Існують будь-які інші інструменти, такі як Buildout ( http://www.buildout.org/en/latest/ ) з тією ж метою, ізолюйте систему оточення Python для кожного проекту, яким ви керуєте. Якийсь час я цим користуюся, але не зараз.

Незалежні середовища на проект в Python трохи відрізняються від тієї ж ситуації в Ruby. У моєму випадку я використовую pyenv ( https://github.com/yyuu/pyenv ), що є чимось на зразок rbenv, але для Python. різні версії python та virtualenvs на проект, і в цьому ізольованому середовищі я можу використовувати pip або просто встановити (якщо потрібно).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.