Какие эквиваленты Python для сборщика Ruby / коробки Perl?

93

Я знаю о virtualenv и pip. Но они немного отличаются от упаковки / коробки.

Например:

  • pip записывает абсолютный путь к shebang или активирует скрипт
  • pip не имеет execподкоманды ( bundle exec bar)
  • virtualenv копирует интерпретатор Python в локальный каталог

Каждый ли разработчик Python использует virtualenv / pip? Существуют ли другие инструменты управления пакетами для Python?

риво
источник
4
Нет, не каждый пользователь Python использует virtualenv. Мне лично это никогда не было нужно.
Фред Фу,
Я не знаю , о чем - то точно , как Руби Bundler (который я никогда не знал до сих пор, кстати). Что я использую, так это использовать и virtualenv, и pip, и setuptools - или distutils, или любую другую систему распространения, которую я сначала нахожу в Google :) Мне тоже любопытно ответить, но в большинстве случаев это мое решение.
brandizzi 04
pipenvи shovelупомянутые ниже являются более современными вариантами, поскольку был задан этот вопрос.
Джим Мейер
Ни пипенв, ни лопата не равнозначны. Лопата - это не упаковщик, а скорее грабли. Управление зависимостями Python довольно сильно отстает. Это будет объединено в один пип день , хотя ( pypi.org/project/pipfile ) ...
Nomas Prime

Ответы:

72

Из того, что я читал о связке, pip без virtualenv должен работать для вас. Вы можете думать об этом как о чем-то между обычной командой gem и сборщиком. Общие вещи, которые вы можете делать с помощью pip:

  1. Установка пакетов (установка gem)

    pip install mypackage
    
  2. Зависимости и массовая установка (gemfile)

    Вероятно, самый простой способ - использовать файлы pip requirements.txt. По сути, это простой список необходимых пакетов с возможными ограничениями версии. Это может выглядеть примерно так:

    nose==1.1.2
    django<1.3
    PIL
    

    Позже, когда вы захотите установить эти зависимости, вы сделаете:

    $ pip install -r requirements.txt
    

    Простой способ увидеть все ваши текущие пакеты в синтаксисе файла требований:

    $ pip freeze
    

    Вы можете прочитать об этом здесь .

  3. Выполнение (сборщик exec)

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

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

    Есть pip bundleи pip zip/unzip. Но я не уверен, что многие люди его используют.

ps Если вы заботитесь об изоляции среды, вы также можете использовать virtualenv вместе с pip (они близкие друзья и отлично работают вместе). По умолчанию pip устанавливает пакеты в масштабе всей системы, для чего могут потребоваться права администратора.

Денис Шабалин
источник
46
Самое замечательное в сборщике - это то, что часть virtualenv интегрирована и в большинстве случаев права администратора не требуются. Фактически, набор вполне может быть единственным драгоценным камнем, который нужен во всем мире. bundle install --path vendorустанавливает все локально и bundle execдостаточно умен, чтобы понять это. Нет необходимости в явном изменении среды.
Debilski
11
Я не думаю, что пункт №3 верен. Просто запустить исполняемый файл ruby ​​можно как с, так и без него bundle exec. Все дело в bundle execтом, что он изменяет среду, как Gemfileперед запуском исполняемого файла. У Pip нет эквивалента bundle exec, хотя virtualenv может.
Sean Mackesey
@SeanMackesey всякий раз, когда вы запускаете активацию среды virtualenv, вы сразу же попадаете внутрь среды, например, точка python указывает на ту, что находится в env, а не глобально установленная, pythonpath верен в отношении env, все приложения также запускаются из этого env.
Денис Шабалин
8
Главное в сборщике - это стандарт де-факто, вы можете в значительной степени гарантировать, что ЛЮБОЙ рубиновый проект практически любого размера будет иметь Gemfileсат в своем корне, и вы можете, bundle installи все готово, или bundle --deploymentи это ' Я просто буду работать на сервере, и у вас будет мало дел, если на машине есть необходимая версия ruby. У Python просто нет эквивалента. Инструменты есть, культурной вездесущности нет.
ocodo
17

Вы можете использовать pipenv , который имеет аналогичный интерфейс с бандлером.

$ 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

Есть клон pbundler .

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

Тем не менее, версия на git является почти полностью переписанной, чтобы быть намного ближе к поведению Bundler ... включая наличие «Cheesefile» и теперь не поддерживающую requirements.txt. Это печально, так как requirements.txt является стандартом де - факто в pythonland, и есть даже Offical BDFL отметок работы по стандартизации его . Когда это вступит в силу, вы можете быть уверены, что что-то вроде pbundler станет стандартом де-факто. Увы, пока нет ничего стабильного, о чем я знаю (но я бы хотел, чтобы меня доказали, что он ошибается).

Коусу
источник
Этот проект, похоже, исчез. Рассмотрим поэзию: stackoverflow.com/a/61771381/115075
bb.
1

Я написал один - https://github.com/Deepwalker/pundler . В PIP это pundleимя уже занято.

Он использует requirements(_\w+)?.txtфайлы в качестве желаемых зависимостей и создает frozen(_\w+)?.txtфайлы с замороженными версиями.

О (_\w+)?вещи - это envs. Вы можете создать PUNDLEENV=testфайл requirements_test.txt, а затем использовать его для использования в вашем прогоне вместе с файлом requirements.txt.

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

Михаил Кривушин
источник
1

Python Poetry наиболее близок к сборщику Ruby по состоянию на 2020 год (и уже с 2018 года). Ему уже больше двух лет, он все еще очень активен, имеет отличную документацию. Можно пожаловаться, что curl-pipe-python-style является рекомендуемым способом установки, но есть альтернативы, например homebrew на macOS.

Он использует virtualenvs за кулисами (в отличие от сборщика), но он предоставляет и использует файл блокировки, заботится о подчиненных зависимостях, придерживается указанных ограничений версии и позволяет автоматически обновлять устаревшие пакеты. Есть даже автозаполнение для вашей любимой оболочки.

Благодаря использованию файла pyproject.toml он также идет немного дальше, чем сборщик (ближе к gemspec. Он также сопоставим с npm и yarn JavaScript и TypeScript).

Poetrify (дополнительный проект) помогает конвертировать проекты из requirements.txt в pyproject.toml для Poetry.

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

bb.
источник
1

Я бы сказал, что лопату стоит посмотреть. Он был разработан специально для Python-версии Rake. В проекте не так много коммитов, но он кажется стабильным и полезным.

Джим Мейер
источник
0

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

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

Независимые среды для каждого проекта в Python немного отличаются от той же ситуации в Ruby. В моем случае я использую pyenv ( https://github.com/yyuu/pyenv ), что-то вроде rbenv, но для Python. разные версии python и virtualenvs для каждого проекта, и в этих изолированных средах я могу использовать pip или easy-install (при необходимости).

Йонси Солис
источник