Что такое пип-эквивалент пакета установки 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