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.


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


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

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


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.



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


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


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.