Я знаю о virtualenv и pip. Но они немного отличаются от bundler/carton.
Например:
exec
(bundle exec bar
)Использует ли каждый разработчик Python virtualenv/pip? Существуют ли другие инструменты управления пакетами для Python?
Из того, что я прочитал о 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 устанавливает пакеты по всей системе, которые могут потребовать прав администратора.
bundle install --path vendor
устанавливает все локально, и bundle exec
достаточно умен, чтобы понять это. Нет необходимости в явных изменениях среды.
bundle exec
. Весь смысл bundle exec
заключается в том, что он изменяет среду согласно Gemfile
перед запуском исполняемого файла. Pip не имеет эквивалента для bundle exec
, хотя virtualenv может.
Существует clone pbundler.
Версия, которая в настоящее время находится в папке, просто читает файл requirements.txt
, который у вас уже есть, но сильно устарел. Он также не полностью эквивалентен: он настаивает на создании virtualenv
. Я заметил, что Bundler устанавливает только те пакеты, которые вам недоступны, и дает вам возможность указать ваш пароль sudo для установки в систему или перезагрузки, что, похоже, не является функцией pbundler.
Однако версия на git является почти полной перепиской, которая намного ближе к поведению Бундлера... включая наличие "Cheesefile" и теперь не поддерживает требования .txt. Это печально, так как требование .txt является де-факто стандартом в pythonland, и там даже Offical BDFL-штамп работает на стандартизировать его. Когда это вступит в силу, вы можете быть уверены, что что-то вроде pbundler станет стандартом де-факто. Увы, ничего более стабильного, о котором я знаю (но я бы хотел, чтобы его доказали неправильно).
Вы можете использовать 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!')"
Я написал один - https://github.com/Deepwalker/pundler.
В PIP его pundle
имя уже было выполнено.
Он использует файлы requirements(_\w+)?.txt
в качестве ваших необходимых зависимостей и создает файлы frozen(_\w+)?.txt
с замороженными версиями.
О (_\w+)?
вещь - это envs. Вы можете создать require_test.txt, а затем использовать PUNDLEENV=test
, чтобы использовать эти отпечатки в вашем прогоне вместе с параметрами requirements.txt.
А о virtualenv - вам не нужно, его то, что pundle берет из связки в первую голову.
Нет, все разработчики не используют 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 (если это необходимо).