Что такое пип-эквивалент пакета установки npm --save-dev`?
В nodejs я могу сделать npm install package --save-dev
, чтобы сохранить установленный пакет в пакет.
Как мне добиться того же самого в диспетчере пакетов Python pip
? Я хотел бы сохранить имя пакета и его версию, скажем, requirements.pip
сразу после установки пакета, используя что-то вроде pip install package --save-dev requirements.pip
.
Ответы
Ответ 1
Там нет эквивалента с pip
.
Лучший способ - это pip install package && pip freeze > requirements.txt
Вы можете увидеть все доступные опции на их странице документации.
Если это действительно беспокоит вас, это не было бы слишком трудно написать собственный Баш скрипт (pips
), который принимает -s
аргумент и замерзает на ваш requirements.txt
файл автоматически.
Редактировать 1
С момента написания этой статьи не было никаких изменений в предоставлении опции auto --save-dev
аналогичной NPM, однако Кеннет Рейтц (автор requests
и многое другое) выпустил дополнительную информацию о лучшем рабочем процессе пипа для лучшей обработки обновлений pip
.
Редактировать 2
В связи с приведенной выше статьей "лучший рабочий процесс для pip" теперь рекомендуется использовать pipenv
для управления требованиями и виртуальными средами. Пользуясь этим много раз в последнее время, я хотел бы резюмировать, насколько простой переход:
Установите pipenv
(на Mac)
brew install pipenv
pipenv
создает и управляет им собственные виртуальные среды, поэтому в проекте с существующей requirements.txt
, устанавливая все требования (я использую Python3.7, но вы можете удалить --three
, если вы этого не сделаете) так же просто, как:
pipenv --three install
Активировать virtualenv для запуска команд также легко
pipenv shell
Требования к установке автоматически обновят Pipfile
и Pipfile.lock
pipenv install <package>
Также возможно обновление устаревших пакетов
pipenv update
Я настоятельно рекомендую проверить это, особенно если вы исходите из фона npm
как он похож на package.json
и package-lock.json
Ответ 2
Одной из проблем с использованием pip freeze > requirements.txt
является то, что не только наши прямые зависимости, но и их зависимости копируются в файл требований, и поэтому становится довольно сложно определить точные требования для вашего приложения/проекта.
Я создал небольшой пакет python pip-save, который является оболочкой над командой pip и только добавляет/удаляет вашу зависимость из файла требований.
Установка
$ pip install pip-save
Использование
Чтобы установить пакет и добавить его в свой файл требований .txt
$ pip-save install [<list of packages>]
Чтобы обновить пакет
$ pip-save install --upgrade [<list of packages>]
Чтобы удалить пакет и удалить его из вашего требования. txt
$ pip-save uninstall [<list of packages>]
Чтобы установить пакет из VCS и добавить его в свой файл требований
$ pip-save install -e <url of the repo>
Ответ 3
Эта простая линия является отправной точкой. Вы можете легко собрать команду bash, чтобы повторно использовать ПАКЕТ в строке.
pip install PACKAGE && pip freeze | grep PACKAGE >> requirements.txt
Спасибо @devsnd за простой пример функции bash:
function pip-install-save {
pip install $1 && pip freeze | grep $1 >> requirements.txt
}
Чтобы использовать это, просто запустите:
pip-install-save some-package
Ответ 4
Страница Python Manage Application Dependencies теперь рекомендует pipenv в качестве инструмента управления зависимостями. Он оборачивает pip
и, помимо прочего, предоставляет то, что вы спрашиваете:
https://docs.pipenv.org/basics/#example-pipenv-workflow
$ pipenv install <package>
Это создаст Pip файл, если он не существует. Если он существует, он будет автоматически отредактирован в соответствии с предоставленным вами новым пакетом.
Pipfile
является прямым эквивалентом package.json
, а Pipfile.lock
соответствует package-lock.json
.
Ответ 5
Я быстро взломал pip
, чтобы добавить параметр --save
для установки/удаления команд.
Пожалуйста, посмотрите мой блог для получения дополнительной информации об этом взломе:
http://blog.abhiomkar.in/2015/11/12/pip-save-npm-like-behaviour-to-pip/
Установка (GitHub):
https://github.com/abhiomkar/pip-save
Надеюсь, что это поможет.
Ответ 6
Я создал пакет python, который оборачивается вокруг фактического pip
называемого pipm. Все команды pip
будут работать как есть, плюс они будут отражены в файле требований. В отличие от pip-save
(похожий инструмент, который я нашел и не смог использовать), он может обрабатывать множество файлов и сред (test, dev, production и т.д.). Он также имеет команду для обновления всех/любых ваших зависимостей.
монтаж
pipm install pkg-name
установка как зависимость развития
pipm install pkg-name --dev
установка как тестирование зависимости
pipm install pkg-name --test
удаление
pipm uninstall pkg-name
обновить все ваши зависимости
pipm update
установить все ваши зависимости из файла требований
pipm install
в том числе зависимости развития
pipm install --dev
Ответ 7
вы можете вручную сохранить его в Makefile (или текстовом файле, а затем импортировать в Makefile):
PYTHON=.venv/bin/python # path to pyphon
PIP=.venv/bin/pip # path to pip
SOURCE_VENV=. .venv/bin/activate
install:
virtualenv .venv
$(SOURCE_VENV) && $(PIP) install -e PACKAGE
$(SOURCE_VENV) && $(PIP) install -r requirements.txt # other required packages
а затем просто запустите make install
Ответ 8
Как сделать функцию оболочки для этого?
Добавьте код ниже в ~/.profile
или ~/.bashrc
pips() {
local pkg=$1
if [ -z "$1" ]; then
echo "usage: pips <pkg name>"
return 1
fi
local _ins="pip install $pkg"
eval $_ins
pip freeze | grep $pkg -i >> requirements.txt
}
затем запустите source ~/.profile
или source ~/.bashrc
, чтобы импортировать его на ваш текущий терминал
когда вы хотите установить && сохраните пакет, просто запустите, например pips requests
.
после установки пакета его версия будет сохранена в requirements.txt
в вашем текущем каталоге.
Ответ 9
Я использую эту небольшую командную строку, чтобы установить пакет и сохранить его версию в requirements.txt
: pkg=package && pip install $pkg && echo $(pip freeze | grep -i $pkg) >> requirements.txt