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

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

Например:

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

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

Ответ 1

Из того, что я прочитал о 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 устанавливает пакеты по всей системе, которые могут потребовать прав администратора.

Ответ 2

Существует 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!')"

Ответ 4

Нет, все разработчики не используют 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 (если это необходимо).

Ответ 5

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

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

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

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