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

6 minutos de lectura

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

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

  • pip freeze > requirements.pip

    – falsetru

    2 oct 2013 a las 11:37

  • Esto no es lo mismo. npm install package --save-dev combina la instalación y la adición al archivo de requisitos de node_npm al mismo tiempo. Es más práctico. Con pip freeze Tengo que hacer dos comandos para hacer lo mismo: 1) pip install package 2) pip freeze > requirements.pip

    – hllau

    2 de octubre de 2013 a las 12:03

  • pipa tiene tema sobre --save opción.

    – Rutsky

    16 de septiembre de 2015 a las 14:28

  • Si uso setup.py para los requisitos, he creado un pequeño módulo para congelar las versiones de su paquete en setup.py.

    – Adán Gold

    16 de enero de 2019 a las 8:41

  • Puede crear un entorno e instalar sus dependencias de producción, y clonarlo para crear un entorno de desarrollo e instalar dependencias de desarrollo. Pero tienes que sincronizarlos manualmente. O instale la dependencia de desarrollo globalmente. No se puede compartir entre los desarrolladores, pero se usará por completo. Node.js lo hace mejor en este caso.

    – 27px

    28 de enero a las 11:13

avatar de usuario
Ewan

No hay un equivalente con pip.

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

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

Si realmente le molesta, no sería demasiado difícil escribir un script de bash personalizado (pips) que toma un -s argumento y se congela a su requirements.txt archivo automáticamente.

Editar 1

Desde que escribo esto no ha habido ningún cambio en proporcionar un auto --save-dev opción similar a NPM sin embargo Kenneth Reitz (autor de requests y muchos más) ha publicado más información sobre un mejor flujo de trabajo de pip para manejar mejor pip actualizaciones

Editar 2

Vinculado desde el artículo “mejor flujo de trabajo de pip” anterior, ahora se recomienda su uso pipenv para gestionar requisitos y entornos virtuales. Habiendo usado esto mucho recientemente, me gustaría resumir cuán simple es la transición:

Instalar pipenv (en Mac)

brew install pipenv

pipenv crea y administra sus propios entornos virtuales, por lo que en un proyecto con un requirements.txtinstalando todos los requisitos (uso Python3.7 pero puede eliminar el --three si 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 Pipfile y Pipfile.lock

pipenv install <package>

También es posible actualizar paquetes obsoletos

pipenv update

te lo recomiendo mucho Comprobándolo especialmente si viene de un npm fondo ya que tiene una sensación similar a package.json y package-lock.json

  • Tenga en cuenta que esto también guardará dependencias de dependencias que, con el tiempo, podrían no ser necesarias porque la dependencia dejó de usarlo.

    -Patricio Bassut

    26 de abril de 2015 a las 6:46


  • 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?

    – jeznag

    5 de marzo de 2020 a las 5:20

  • @jeznag pipenv le permite especificar un dev-packages en tus Pipfile y/o uso --dev (o -d) desde la línea de comandos. p.ej pipenv install --dev nose2

    – Ewan

    5 de marzo de 2020 a las 6:20

avatar de usuario
Karim N. Gorjux

Esta simple línea 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 ejemplo simple de la función bash:

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

Para usarlo, simplemente ejecute:

pip-install-save some-package

  • mis cinco centavos P=Flask pip install $P && pip freeze | grep $P >> requirements.txt

    – GBrian

    18 mayo 2020 a las 17:39


  • ¿Qué pasa con la versión del paquete?

    – Anis LOUNIS alias AnixPasBesoin

    7 mar a las 15:33

  • El comando pip freeze también recupera la versión del paquete

    – Karim N. Gorjux

    9 de marzo a las 19:46

  • Encontré esta respuesta muy útil. Estoy en un entorno de Windows, así que aquí hay una versión de Powershell de la función bash: pip install $package; pip freeze | select-string $package -Raw >> $requirementsFile.

    – Rob H.

    25 abr a las 17:46

avatar de usuario
Raja del Norte

He creado un paquete de python que envuelve el actual pip llamó pipm. Todos pip los comandos funcionarán tal cual, además se reflejarán en el archivo de requisitos. A diferencia de pip-save (inactivo por algún tiempo), una herramienta similar que encontré y no pude usar, puede manejar muchos archivos y entornos (prueba, desarrollo, producción, etc.). También tiene un comando para actualizar todas/cualquiera de sus dependencias.

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

  • En realidad, ¡un desarrollo bastante interesante!

    – artu-hnrq

    17 de febrero de 2021 a las 2:45

avatar de usuario
dskrvk

Actualizar: aparentemente, pipenv no está respaldado oficialmente por los mantenedores de Pythony el página previamente enlazada es propiedad de una organización diferente. La herramienta tiene sus pros y sus contras, pero la siguiente solución aún logra el resultado que busca el OP.

pipenv es una herramienta de gestión de dependencias que envuelve pip y, entre otras cosas, proporciona lo que estás 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 Pipfile es un equivalente directo de package.jsontiempo Pipfile.lock corresponde a package-lock.json.

avatar de usuario
Evan Levesque

puedes a mano guárdelo en un Makefile (o un archivo de texto y luego impórtelo 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 corre make install

  • Estoy totalmente de acuerdo con este enfoque.

    – eleijónmarck

    31 de enero de 2020 a las 10:49

avatar de usuario
antonio pierotti

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

  • Estoy totalmente de acuerdo con este enfoque.

    – eleijónmarck

    31 de enero de 2020 a las 10:49

avatar de usuario
abhiomkar

Hice un truco rápido en pip agregar --save Opción para instalar/desinstalar comandos.

Por favor, eche un vistazo a mi blog para obtener más información acerca de este truco:
http://blog.abhiomkar.in/2015/11/12/pip-save-npm-like-behaviour-to-pip/

Instalación (GitHub):
https://github.com/abhiomkar/pip-save

Espero que esto ayude.

¿Ha sido útil esta solución?