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

76

Я знаю о virtualenv и pip. Но они немного отличаются от bundler/carton.

Например:

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

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

  • 4
    Нет, не каждый пользователь Python использует virtualenv. Я лично никогда не нуждался в этом.
  • 0
    Я не знаю ничего такого , как пакет Ruby (чего я не знал до сих пор, кстати). Я использую как virtualenv, так и pip и setuptools - или distutils, или любую другую систему распространения, которую я сначала найду в Google :) Мне также любопытен ответ, но в большинстве случаев это мое решение.
Показать ещё 1 комментарий
Теги:
pip
virtualenv

5 ответов

65

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

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

    pip install mypackage
    
  • Зависимости и объемная установка (gemfile)

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

    nose==1.1.2
    django<1.3
    PIL
    

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

    $ pip install -r requirements.txt
    

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

    $ pip freeze
    

    Подробнее об этом можно узнать .

  • Выполнение (bundler exec)

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

    $ pip install gunicorn
    $ gunicorn -h 
    
  • Драгоценные камни для установки из кеша (пакет bundler)

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

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

  • 42
    Самое замечательное в bundler - это то, что компонент virtualenv интегрирован, и в большинстве случаев никаких прав администратора не требуется. Фактически, связка может быть единственным драгоценным камнем, который нужен во всем мире. bundle install --path vendor устанавливает все локально, и bundle exec достаточно умен, чтобы понять это. Нет необходимости в явных изменениях среды.
  • 11
    Я не думаю, что пункт № 3 является правильным. Просто запустить исполняемый файл ruby можно с или без exe- bundle exec . Весь смысл bundle exec заключается в том, что он изменяет среду согласно Gemfile перед запуском исполняемого файла. Pip не имеет эквивалента для bundle exec , хотя virtualenv может.
Показать ещё 2 комментария
4

Существует clone pbundler.

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

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

3

Вы можете использовать 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!')"
0

Я написал один - https://github.com/Deepwalker/pundler. В PIP его pundle имя уже было выполнено.

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

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

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

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 (если это необходимо).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню