Я знаю о virtualenv и pip. Но они немного отличаются от упаковки / коробки.
Например:
- pip записывает абсолютный путь к shebang или активирует скрипт
- pip не имеет
exec
подкоманды (bundle exec bar
) - virtualenv копирует интерпретатор Python в локальный каталог
Каждый ли разработчик Python использует virtualenv / pip? Существуют ли другие инструменты управления пакетами для Python?
pipenv
иshovel
упомянутые ниже являются более современными вариантами, поскольку был задан этот вопрос.Ответы:
Из того, что я читал о связке, pip без virtualenv должен работать для вас. Вы можете думать об этом как о чем-то между обычной командой gem и сборщиком. Общие вещи, которые вы можете делать с помощью pip:
Установка пакетов (установка gem)
pip install mypackage
Зависимости и массовая установка (gemfile)
Вероятно, самый простой способ - использовать файлы pip requirements.txt. По сути, это простой список необходимых пакетов с возможными ограничениями версии. Это может выглядеть примерно так:
Позже, когда вы захотите установить эти зависимости, вы сделаете:
Простой способ увидеть все ваши текущие пакеты в синтаксисе файла требований:
Вы можете прочитать об этом здесь .
Выполнение (сборщик exec)
Все пакеты python, которые поставляются с исполняемыми файлами, обычно доступны сразу после установки (если у вас нет специальной установки или это специальный пакет). Например:
Пакетные драгоценные камни для установки из кеша (пакет сборщика)
Есть
pip bundle
иpip zip/unzip
. Но я не уверен, что многие люди его используют.ps Если вы заботитесь об изоляции среды, вы также можете использовать virtualenv вместе с pip (они близкие друзья и отлично работают вместе). По умолчанию pip устанавливает пакеты в масштабе всей системы, для чего могут потребоваться права администратора.
источник
bundle install --path vendor
устанавливает все локально иbundle exec
достаточно умен, чтобы понять это. Нет необходимости в явном изменении среды.bundle exec
. Все дело вbundle exec
том, что он изменяет среду, какGemfile
перед запуском исполняемого файла. У Pip нет эквивалентаbundle exec
, хотя virtualenv может.Gemfile
сат в своем корне, и вы можете,bundle install
и все готово, илиbundle --deployment
и это ' Я просто буду работать на сервере, и у вас будет мало дел, если на машине есть необходимая версия ruby. У Python просто нет эквивалента. Инструменты есть, культурной вездесущности нет.Вы можете использовать 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!')"
источник
Есть клон pbundler .
Версия, которая сейчас находится в pip, просто читает
requirements.txt
файл, который у вас уже есть, но он сильно устарел. Это также не полностью эквивалентно: он настаивает на создании файлаvirtualenv
. Bundler, как я заметил, устанавливает только те пакеты, которые отсутствуют, и дает вам возможность указать пароль sudo для установки в ваши системные каталоги или перезапустить, что не похоже на функцию pbundler.Тем не менее, версия на git является почти полностью переписанной, чтобы быть намного ближе к поведению Bundler ... включая наличие «Cheesefile» и теперь не поддерживающую requirements.txt. Это печально, так как requirements.txt является стандартом де - факто в pythonland, и есть даже Offical BDFL отметок работы по стандартизации его . Когда это вступит в силу, вы можете быть уверены, что что-то вроде pbundler станет стандартом де-факто. Увы, пока нет ничего стабильного, о чем я знаю (но я бы хотел, чтобы меня доказали, что он ошибается).
источник
Я написал один - https://github.com/Deepwalker/pundler . В PIP это
pundle
имя уже занято.Он использует
requirements(_\w+)?.txt
файлы в качестве желаемых зависимостей и создаетfrozen(_\w+)?.txt
файлы с замороженными версиями.О
(_\w+)?
вещи - это envs. Вы можете создатьPUNDLEENV=test
файл requirements_test.txt, а затем использовать его для использования в вашем прогоне вместе с файлом requirements.txt.А насчет virtualenv - вам не нужен один, его то, что pundle берет от сборщика в первой главе.
источник
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
, если он вам понадобится для других инструментов (или, что маловероятно, вы захотите вернуться).источник
Я бы сказал, что лопату стоит посмотреть. Он был разработан специально для Python-версии Rake. В проекте не так много коммитов, но он кажется стабильным и полезным.
источник
Нет, нет, все разработчики используют 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 (при необходимости).
источник