¿Cuál es el equivalente de pip de `npm install package --save-dev`?

199

En nodejs, puedo hacer npm install package --save-devpara guardar el paquete instalado en el paquete.

¿Cómo logro lo mismo en el administrador de paquetes Python pip? Me gustaría guardar el nombre del paquete y su versión en, digamos, requirements.pipjusto después de instalar el paquete usando algo como pip install package --save-dev requirements.pip.

hllau
fuente
44
pip freeze > requirements.pip
falsetru
55
Esto no es lo mismo. npm install package --save-devcombina la instalación y la adición al archivo de requisitos node_npm al mismo tiempo. Es más útil. Con pip freezetengo que hacer dos comandos para hacer lo mismo: 1) pip install package2)pip freeze > requirements.pip
hllau
1
Pip tiene un problema con la --saveopción.
rutsky
Si utilizo setup.py para requisitos, he creado un pequeño módulo para congelar las versiones de su paquete en setup.py.
AdamGold

Respuestas:

164

No hay un equivalente con pip.

La mejor manera es pip install package && pip freeze > requirements.txt

Puede ver todas las opciones disponibles en su página de documentación .

Si realmente te molesta, no sería demasiado difícil escribir un script bash personalizado ( pips) que tome un -sargumento y se congele en tu requirements.txtarchivo automáticamente.

Editar 1

Desde que escribí esto, no ha habido ningún cambio en proporcionar una --save-devopción automática similar a NPM, sin embargo, Kenneth Reitz (autor de requestsy muchos más) ha publicado más información sobre un mejor flujo de trabajo de pip para manejar mejor las pipactualizaciones.

Editar 2

Vinculado desde el artículo "mejor flujo de trabajo de pip" anterior, ahora se recomienda usar pipenvpara administrar requisitos y entornos virtuales. Habiendo usado esto mucho recientemente, me gustaría resumir lo simple que es la transición:

Instalar pipenv(en Mac)

brew install pipenv

pipenvcrea y gestiona sus propios entornos virtuales, por lo que en un proyecto con uno existente requirements.txt, la instalación de todos los requisitos (uso Python3.7 pero puede eliminarlos --threesi no lo hace) es tan simple como:

pipenv --three install

Activar virtualenv para ejecutar comandos también es fácil

pipenv shell

Los requisitos de instalación actualizarán automáticamente el PipfileyPipfile.lock

pipenv install <package>

También es posible actualizar paquetes desactualizados

pipenv update

Recomiendo comprobarlo especialmente si proviene de un npmfondo, ya que tiene una sensación similar package.jsonypackage-lock.json

Ewan
fuente
22
Tenga en cuenta que esto también ahorrará dependencias de dependencias que, con el tiempo, podrían no ser necesarias porque la dependencia dejó de usarse.
Patrick Bassut el
Esto no parece abordar el aspecto --save-dev de la pregunta original que le permite tener diferentes dependencias para el desarrollo local frente a la producción. ¿Cómo puedes lograr eso con pipenv?
Jueves
1
@jeznag le pipenvpermite especificar un dev-packagesen su Pipfiley / o uso --dev(o -d) desde la línea de comandos. egpipenv install --dev nose2
Ewan
39

Esta línea simple es un punto de partida. Puede crear fácilmente un comando bash para reutilizar el PAQUETE en la línea.

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

Gracias a @devsnd por el sencillo ejemplo de la función bash:

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

Para usarlo, solo ejecuta:

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

He creado un paquete de Python que se ajusta al pipm real pipllamado . Todos los comandos funcionarán tal cual, además se reflejarán en el archivo de requisitos. A diferencia de (herramienta similar que encontré y que no pude usar) puede manejar muchos archivos y entornos (prueba, desarrollo, producción, etc.). También tiene el comando para actualizar todas / cualquiera de sus dependencias.pippip-save

instalación

pipm install pkg-name

instalación como dependencia de desarrollo

pipm install pkg-name --dev

instalación como dependencia de prueba

pipm install pkg-name --test

eliminación

pipm uninstall pkg-name

actualiza todas tus dependencias

pipm update

instale todas sus dependencias desde el archivo de requisitos

pipm install

incluyendo dependencias de desarrollo

pipm install --dev

Noortheen Raja
fuente
3

Actualización: aparentemente, pipenv no cuenta con el respaldo oficial de los mantenedores de Python , y la página vinculada anteriormente es propiedad de una organización diferente. La herramienta tiene sus pros y sus contras, pero la solución a continuación aún logra el resultado que busca el OP.

pipenv es una herramienta de administración de dependencias que envuelve pipy, entre otras cosas, proporciona lo que está pidiendo:

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

$ pipenv install <package>

Esto creará un Pipfile si no existe uno. Si existe, se editará automáticamente con el nuevo paquete que proporcionó.

A Pipfilees un equivalente directo de package.json, mientras que Pipfile.lockcorresponde a package-lock.json.

dskrvk
fuente
1

puede guardarlo manualmente en un Makefile (o un archivo de texto y luego importarlo en su 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

y luego solo corro make install

Evan Lévesque
fuente
Estoy totalmente de acuerdo con este enfoque.
eleijonmarck
1

Estoy usando esta pequeña línea de comando para instalar un paquete y guardar su versión en requirements.txt: pkg=package && pip install $pkg && echo $(pip freeze | grep -i $pkg) >> requirements.txt

Anthony Pierotti
fuente
0

¿Qué tal hacer una función de shell para hacer esto? Agregue el siguiente código a su ~/.profileo~/.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
}

luego ejecutar source ~/.profileo source ~/.bashrcimportarlo a su terminal actual

cuando desee instalar y guardar un paquete, simplemente ejecute, por ejemplo pips requests. después de instalar el paquete, su versión se guardará requirements.txten su directorio actual.

Anyany Pan
fuente