¿Está utilizando la opción pip –user tan segura como crear un virtualenv?

¿La instalación de paquetes en el directorio de inicio de un usuario con pip install --user proporciona el mismo nivel de protección contra los cambios de ruptura del sistema que el uso de un virtualenv?

¿La instalación de paquetes en el directorio de inicio de un uso con pip install --user proporciona el mismo nivel de protección contra los cambios de ruptura del sistema que el uso de un virtualenv ?

Por “cambios de ruptura del sistema”, supongo que se refiere a los paquetes instalados por la herramienta del administrador de paquetes del sistema operativo. Con la opción --user de pip , los paquetes se instalarán en el directorio de inicio del usuario. Y dado que se supone que el administrador de paquetes no depende de los directorios de usuarios, sino que utiliza solo los paquetes instalados en la ubicación designada en el sistema, independientemente de la basura de los usuarios, no debería ser posible interrumpir un sistema adecuadamente administrado usando pip install --user .

Sin embargo, si trabaja con más de un proyecto de Python con su usuario, tiene sentido usar siempre virtualenv constantemente, para evitar conflictos de versiones entre los proyectos.

El uso de un virtualenv es preferible por algunas razones pequeñas, y una gran razón.

  • virtualenv tiene una opción de “reubicación” (Nota: esta característica se ha marcado como que tiene problemas y puede que no funcione en todas las circunstancias). Si utiliza –user, deberá volver a instalar todos los paquetes si intenta reubicar su proyecto en otra máquina.

  • A menos que cambie PYTHONPATH para que los módulos en los paquetes de sitio no se carguen, y reinstale cada módulo en su directorio de usuarios, Python continuará buscando módulos que estén instalados en el directorio del sistema. Si está considerando usar –user, asumo que no tiene permiso para instalar paquetes del sistema, o está preocupado por romper enlaces en el futuro. A diferencia de –user, virtualenv realiza un seguimiento de todos los módulos (incluidos los módulos de todo el sistema y los módulos instalados en virtualenv), y como tal, me imagino que será menos probable que “rompa algo” (o, al menos, lo hará). sea ​​más fácil identificar cuál es el problema) si está usando virtualenv.

Estos problemas pueden ser molestias, pero son superables. La mayor diferencia entre –user y virtualenv es que virtualenv le permitirá almacenar una versión de cada paquete para cada entorno que cree, eliminando así las preocupaciones sobre la creación de versiones (es decir, crea un proyecto para trabajar con una versión de un paquete, y más tarde) actualiza el paquete para trabajar en un nuevo proyecto usando alguna característica nueva y descubre que su proyecto anterior ahora está roto). Este es un gran problema y el usuario no hace nada para ayudar a este respecto (a menos que desee crear una nueva cuenta de usuario en su máquina para cada proyecto en el que trabaje, lo cual no recomiendo).