Qual é o equivalente do pip ao `npm install package --save-dev`?

199

No nodejs, posso fazer npm install package --save-devpara salvar o pacote instalado no pacote.

Como faço para conseguir a mesma coisa no gerenciador de pacotes Python pip? Gostaria de salvar o nome do pacote e sua versão em, digamos, requirements.piplogo após instalar o pacote usando algo como pip install package --save-dev requirements.pip.

hllau
fonte
4
pip freeze > requirements.pip
falsetru
5
Isto não é o mesmo. npm install package --save-devcombina instalação e adição ao arquivo de requisitos node_npm ao mesmo tempo. É mais útil. Com pip freezeeu tenho que fazer dois comandos para fazer a mesma coisa: 1) pip install package2)pip freeze > requirements.pip
hllau
1
Pip tem problema sobre a --saveopção.
Rutsky
Se estiver usando o setup.py para requisitos, criei um pequeno módulo para congelar as versões do seu pacote no setup.py.
AdamGold

Respostas:

164

Não há um equivalente com pip.

A melhor maneira é pip install package && pip freeze > requirements.txt

Você pode ver todas as opções disponíveis na página de documentação .

Se isso realmente o incomoda, não seria muito difícil escrever um script bash personalizado ( pips) que use um -sargumento e congele seu requirements.txtarquivo automaticamente.

Editar 1

Desde que escrevemos isso, não houve mudança no fornecimento de uma --save-devopção automática semelhante ao NPM, no entanto, Kenneth Reitz (autor requestse muitos mais) divulgou mais algumas informações sobre um melhor fluxo de trabalho do pip para lidar melhor com as pipatualizações.

Editar 2

Vinculado no artigo "fluxo de trabalho do pip melhor" acima, agora é recomendado o uso pipenvpara gerenciar requisitos e ambientes virtuais. Tendo usado muito isso recentemente, gostaria de resumir o quão simples é a transição:

Instalar pipenv(no Mac)

brew install pipenv

pipenvcria e gerencia seus próprios ambientes virtuais, portanto, em um projeto já existente requirements.txt, a instalação de todos os requisitos (eu uso o Python3.7, mas você pode remover o --threeque não tiver) é tão simples quanto:

pipenv --three install

Ativar o virtualenv para executar comandos também é fácil

pipenv shell

Requisitos Instalação irá atualizar automaticamente o PipfileePipfile.lock

pipenv install <package>

Também é possível atualizar pacotes desatualizados

pipenv update

Eu recomendo vê-lo, especialmente se vier de um npmfundo, pois tem uma sensação semelhante package.jsonepackage-lock.json

Ewan
fonte
22
Observe que isso também salvará dependências de dependências que, com o tempo, podem não ser mais necessárias, porque a dependência descartou o uso.
Patrick Bassut
Isso não parece abordar o aspecto --save-dev da pergunta original, que permite que você tenha dependências diferentes para desenvolvimento local versus produção. Como você pode conseguir isso com o pipenv?
jeznag 5/03
1
O @jeznag pipenvpermite que você especifique a dev-packagesem seu Pipfilee / ou use --dev(ou -d) na linha de comando. por exemplopipenv install --dev nose2
Ewan
39

Essa linha simples é um ponto de partida. Você pode criar facilmente um comando bash para reutilizar o PACKAGE na linha.

pip install PACKAGE && pip freeze | grep PACKAGE >> requirements.txt

Obrigado a @devsnd pelo exemplo simples da função bash:

function pip-install-save { 
    pip install $1 && pip freeze | grep $1 >> requirements.txt
}

Para usá-lo, basta executar:

pip-install-save some-package
Karim N Gorjux
fonte
Meus cinco centavosP=Flask pip install $P && pip freeze | grep $P >> requirements.txt
GBrian
4

Eu criei o pacote python que envolve o real pipchamado pipm . Todos os pipcomandos funcionarão como estão, além de refletidos no arquivo de requisitos. Ao contrário pip-save(ferramenta semelhante que encontrei e não consegui usar), ele pode lidar com muitos arquivos e ambientes (teste, desenvolvimento, produção etc.). Ele também possui comando para atualizar todas / algumas de suas dependências.

instalação

pipm install pkg-name

instalação como dependência de desenvolvimento

pipm install pkg-name --dev

instalação como dependência de teste

pipm install pkg-name --test

remoção

pipm uninstall pkg-name

atualize todas as suas dependências

pipm update

instale todas as suas dependências a partir do arquivo de requisitos

pipm install

incluindo dependências de desenvolvimento

pipm install --dev

Noortheen Raja
fonte
3

Atualização: aparentemente, o pipenv não é oficialmente endossado pelos mantenedores do Python , e a página vinculada anteriormente pertence a uma organização diferente. A ferramenta tem seus prós e contras, mas a solução abaixo ainda alcança o resultado que o OP está buscando.

O pipenv é uma ferramenta de gerenciamento de dependência que envolve pipe, entre outras coisas, fornece o que você está perguntando:

https://pipenv.kennethreitz.org/en/latest/#example-pipenv-workflow

$ pipenv install <package>

Isso criará um Pipfile se não existir. Se existir, ele será automaticamente editado com o novo pacote fornecido.

A Pipfileé um equivalente direto de package.json, enquanto Pipfile.lockcorresponde a package-lock.json.

dskrvk
fonte
1

você pode salvá-lo manualmente em um Makefile (ou em um arquivo de texto e depois importá-lo em seu 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

e então apenas corra make install

Evan Lévesque
fonte
Eu concordo totalmente com essa abordagem.
eleijonmarck 31/01
1

Estou usando esta pequena linha de comando para instalar um pacote e salvar sua versão em requirements.txt: pkg=package && pip install $pkg && echo $(pip freeze | grep -i $pkg) >> requirements.txt

Anthony Pierotti
fonte
0

Que tal fazer um shell funcionar para fazer isso? Adicione o código abaixo ao seu ~/.profileou~/.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
}

execute source ~/.profileou source ~/.bashrcimporte-o para o seu terminal atual

quando você deseja instalar o && salvar um pacote, basta executar, por exemplo pips requests. após a instalação do pacote, sua versão será salva requirements.txtno diretório atual.

Anyany Pan
fonte