Pipenv es la forma recomendada de instalar paquetes de python y usar un entorno virtual, porque cuando se utiliza  el administrador de paquetes pip que se incluye con python, cualquier cosa que instale, se instala globalmente, entonces no se tiene  entornos encapsulados para cada proyecto, Si usa django o machine learning en alguno de sus proyectos , es posible que necesite tener cada proyecto con su propio entorno, y pipenv nos permite hacerlo fácilmente. Además de ser el unico administrador de paquetes que es altamente recomendado por la PyPa y por la comunidad de desarrolladores y testers.

¿Qué es la PyPa?

Python Packaging Authority (PyPA) es un grupo de trabajo que mantiene un conjunto básico de proyectos utilizados en Python Packaging.

Pipenv crea y gestiona automáticamente un entorno virtual y también nos permite agregar y eliminar fácilmente paquetes. Ademas de instalarse fácilmente, basta con ejecutar el comando

Algo de Historia

Pip

Probablemente la alternativa más común que pueda encontrar. Pip es el sistema de administración de paquetes utilizado para instalar y administrar paquetes de Python. Ahora viene con python 3, ni siquiera necesita instalarlo, solo abra el terminal y úselo. Pero si usa Python 2 (que ahora se está volviendo obsoleto), es posible que deba instalarlo usted mismo. pip, si alguna vez has trabajado con Node.js es el equivalente de npm

Desventajas de usar pip

Los desarrolladores de Python pueden estar trabajando en más de un proyecto simultáneamente, y todos esos proyectos pueden no estar utilizando la misma versión de un framework específico o alguna  dependencia, por lo que la administración de paquetes se convierte en una pesadilla. Cada vez que los desarrolladores cambian el proyecto con el que están trabajando, necesitan cambiar sus versiones de dependencias y frameworks.

VirtualEnv

Virtualenv viene a mejorar pip, se ha utilizado durante al menos diez años o más, encapsula proyectos de python para que no tenga que preocuparse por tener dependencias globales (lo cual  ahora se considera una mala práctica), puede portar Sus proyectos y virtualenv creará los  contenedores.

Antes usaríamos virtualenv para crear un entorno virtual y luego ejecutar pip desde allí. pero Pipenv crea y gestiona automáticamente entornos virtuales y también nos permite agregar fácilmente paquetes de eliminación utilizando un archivo pip que es similar a un packacge.json si está familiarizado con Node.js

  Desventajas de virtualenv

pip + virtualenv podría ser difícil para los principiantes, si estás comenzando en el gran mundo de la programación, los conceptos no son fáciles de entender     requerimientos.txt  si trabaja con pip + virtualenv es una buena práctica tener un requirement.txt, es un archivo donde el desarrollador debe especificar qué proyecto usa qué dependencias. Puede ser difícil mantenerlo actualizado si tenemos dependencias de desarrollo que no se utilizarán en la producción.

¿Por qué debería usar pipenv?

Pipenv fue creado para resolver esos problemas. Evita el mantenimiento manual de las dependencias. Como he dicho antes, tener dependencias globales instaladas se considera una mala práctica. Y cambiar las dependencias cada vez que cambia su proyecto puede ser una pérdida de tiempo.

Es fácil saber qué versión de python usa el proyecto, Lo creas o no, algunos desarrolladores que no usan pipenv en sus proyectos, nombran su proyecto con la versión de python que usa el proyecto, por ejemplo: ProjectNamePyVer3731, si usamos pipenv es fácil saber la versión de Python, ya  que está en el pipfile.  Un pipfile  es un archivo que nos muestra  las dependencias de una manera más simple,y  actualiza las dependencias de forma segura y automática (si queremos),Además Nos permite tener entornos de desarrollo y producción por separado.

A continuación se presenta la estructura de un pipfile

Algunos comandos útiles

Utilice el siguiente comando  para crear el archivo pipfile en caso de que no exista.

$pipenv shell

Para instalar pipenv

Se pueden instalar paquetes con el comando:

$pipenv install camelcase 

Si se desea consultar los paquetes ya instalados, basta con ejecutar el comando:

$pipenv lock -r

Al ejecutar el comando, se observa la lista de paquetes instalados, en nuestro caso, únicamente el camelcase

De igual manera se puede desinstalar un paquete sustituyendo el nombre (camelcase) por el cual deseamos desinstalar

$pipenv uninstall camelcase

Conclusión

El uso de pip no es erróneo, pip es una gran gestor de paquetes, pero no es el adecuado cuando se trabaja con 2 o mas proyectos a la vez. Espero que este  post haya sido de su agrado y que le sirva en sus actuales o futuros proyectos en Python.