Hola de nuevo En previsión del comienzo de un nuevo hilo en el curso de Machine Learning , queremos compartir una traducción del artículo, que tiene una relación bastante indirecta con ML, pero que sin duda será útil para los suscriptores de nuestro blog.

Mariatta , una desarrolladora canadiense, preguntó en 
python -m pip en Twitter, pidiéndole que hablara sobre este idioma y explicara cómo funciona.
Recientemente aprendí que necesitas escribir python -m pip en lugar de la instalación habitual de pip, pero ahora no puedo recordar de quién escuché. Probablemente de @brettsky o @zooba . ¿Alguno de ustedes tiene una publicación en el blog para que yo pueda compartirla con los lectores? 
- Mariatta ( @mariatta ) 29 de octubre de 2019 ( https://twitter.com/mariatta/status/1189243515739561985?ref_src=twsrc%5Etfw )
No estoy seguro de lo que le dije a Mariatta sobre 
python -m pip , pero hay muchas posibilidades de que fuera yo, ya que pedí que esta instrucción para instalar paquetes usando 
PyPI se escriba de esta manera desde 2016. Entonces, este artículo debería explicar qué es 
python -m pip y por qué debería usarlo al iniciar 
pip . 
¿Qué es python -m pip?
Para empezar, 
python -m pip ejecuta pip utilizando la versión de Python que especificó para la instrucción python. Por lo tanto, 
/usr/bin/python3.7 -m pip significa que ejecuta 
pip para el intérprete ubicado en 
/usr/bin/python3.7 . Puede leer la 
documentación sobre el indicador 
-m si no sabe cómo funciona (por cierto, es extremadamente útil).
¿Por qué usar python -m pip en lugar de pip / pip3?
Puede decir: "Está bien, pero ¿por qué no puedo usar 
pip simplemente ejecutando el comando 
pip ?" La respuesta es: "Sí, pero tendrá menos control sobre él". Explicaré lo que significa "controlar menos" con un ejemplo.
Supongamos que tengo dos versiones de Python instaladas, por ejemplo, Python 3.7 y 3.8 (esto es muy común entre las personas que trabajan en Mac OS o Linux, sin mencionar el hecho de que probablemente quisiste jugar con Python 3.8, y ya tenías Python 3.7). Entonces, si escribe 
pip en la terminal, ¿para qué intérprete de Python instalará el paquete?
Sin información más detallada no sabrás la respuesta. Primero, necesitará comprender qué hay en PATH, es decir, 
/usr/bin va primero o 
/usr/local/bin (que son los lugares más comunes para instalar Python, por cierto, usualmente 
/usr/local/ va primero). Entonces, recuerda dónde instaló Python 3.7 y 3.8 y que eran directorios diferentes, y sabrá primero qué vino en PATH. Supongamos que instaló ambos manualmente, tal vez Python 3.7.3 ya estaba preinstalado en su sistema e instaló Python 3.7.5. En este caso, ambas versiones de Python se instalan en 
/usr/local/bin . ¿Puedes decirme ahora a qué 
pip está conectado ahora?
No sabes la respuesta. Si no sabe cuándo se instaló cada versión y comprende que la última versión de 
pip se escribió en 
/usr/local/bin/pip , pero no sabe qué intérprete se utilizará para el comando 
pip . Ahora puede decir: "Siempre instalo las últimas versiones, lo que significa que Python 3.8.0 se instalará en último lugar, porque es más nuevo que, digamos, 3.7.5". Ok, pero ¿qué sucede cuando sale Python 3.7? .6? Su 
pip ya no se usaría desde Python 3.8, sino desde Python 3.7.
Cuando usa 
python -m pip con el intérprete de python específico que necesita, toda la ambigüedad desaparece. Si escribo 
python3.8 -m pip , sé exactamente qué 
pip se usará y que el paquete se instalará para Python 3.8 (lo mismo ocurriría si señalara python3.7).
Si usa Windows, entonces tiene un incentivo adicional para usar 
python -m pip , ya que permite que 
pip se actualice solo. Principalmente porque 
pip.exe se considera en ejecución cuando escribe 
pip install --upgrade pip . En este punto, Windows no le permitirá reinstalar 
pip.exe . Sin embargo, si realiza la instalación de 
python-m pip --upgrade pip , 
evitará este problema cuando se 
inicie python.exe , no 
pip.exe .
¿Y qué sucede cuando estoy en un entorno activado?
Por lo general, cuando explico la esencia de este artículo a las personas, siempre hay alguien que dice: "Siempre uso el entorno virtual, y esto no se aplica a mí". Bueno, para empezar, ¡SIEMPRE sería bueno usar un entorno virtual! (¡Explicaré por qué lo creo en uno de mis próximos artículos!) Pero para ser honesto, aún insistiría en usar 
python -m pip , incluso si, estrictamente hablando, esto no es necesario.
Primero, si usa Windows, aún desea usar 
python-m pip para poder actualizar 
pip en su entorno.
En segundo lugar, incluso si usa un sistema operativo diferente, diría que aún necesita usar 
python-m pip , ya que funcionará independientemente de la situación. Le advertirá sobre un error si olvida activar el entorno, y cualquiera que lo observe adoptará las mejores prácticas. Y personalmente, no creo que guardar 10 pulsaciones de teclas sea un precio significativo por no utilizar las buenas prácticas. Y este comando también lo ayudará a evitar errores al escribir scripts de automatización que realizarán operaciones obviamente incorrectas si olvida activar el entorno.
Personalmente, cuando uso cualquier herramienta cuyo trabajo depende de qué intérprete se inicia, siempre uso 
-m , independientemente de si el entorno virtual está activado o no. Siempre es importante para mí entender qué intérprete de Python estoy usando.
¡SIEMPRE use el medio ambiente! ¡No ponga todo en una fila en el intérprete global!
Cuando hablamos de cómo evitar la confusión al instalar en Python, quiero enfatizar que no debemos instalar nada en el intérprete global de Python cuando trabajamos localmente (¡los contenedores son un asunto completamente diferente)! Si este es el Python preinstalado de su sistema, entonces si instala alguna versión incompatible de la biblioteca en la que se basa su sistema operativo, entonces realmente romperá el sistema.
Pero incluso si instala una copia de 
Python por separado para usted, todavía le recomiendo no instalarla directamente en el desarrollo local. En última instancia, utilizará varios paquetes en sus proyectos que pueden entrar en conflicto entre sí, y no tendrá una idea clara de las dependencias dentro de sus proyectos. Es mucho mejor usar entornos para aislar proyectos individuales y herramientas para ellos unos de otros. La comunidad Python utiliza dos tipos de entornos: entornos virtuales y entornos conda. Incluso hay una forma especial de instalar las herramientas de Python de forma aislada.
Si necesitas instalar una herramienta
Para una instalación 
independiente de la herramienta, puedo recomendar el uso de 
pipx . Cada herramienta recibirá su propio entorno virtual, para no entrar en conflicto con otros. Por lo tanto, si desea tener solo una instalación, por ejemplo, 
Black , puede trabajar sin interrumpir accidentalmente su única instalación de 
mypy .
Si necesita un entorno de proyecto (y no usa conda)
Cuando necesita crear un entorno para un proyecto, personalmente siempre 
recurro a 
entornos virtuales y virtuales. Se incluye en 
stdlib Python, por lo que siempre está disponible con 
python-m venv (a menos que, por supuesto, esté utilizando Debian o Ubuntu, en cuyo caso es posible que necesite instalar el paquete 
apto de python3-venv ). Un poco de historia: en realidad 
eliminé el antiguo comando 
pyvenv que Python instaló para crear entornos virtuales usando 
venv , por las mismas razones por las que necesita usar 
python -m pip en lugar de 
pip . Es decir, no está claro para qué intérprete creó el entorno virtual utilizando el antiguo 
comando pyvenv . Y recuerde que no necesita activar el entorno para usar el intérprete que contiene, porque 
.venv/bin/python funciona tan bien como activar el entorno e ingresar el comando 
python .
Hoy, algunos desarrolladores aún prefieren 
virtualenv , ya que está disponible en Python 2 y tiene algunas características adicionales. Personalmente, tengo poco interés en las funciones adicionales, y tener 
venv integrado significa que no necesito usar 
pipx para instalar 
virtualenv en cada máquina. Pero si 
venv no 
satisface sus necesidades y desea un entorno virtual, entonces vea si 
virtualenv le ofrece lo que necesita.
Si usas conda
Si usa 
conda , puede usar entornos 
conda para obtener el mismo efecto que pueden ofrecer los entornos virtuales proporcionados por 
venv . No voy a analizar si necesita usar conda o venv en su situación específica, pero si usa 
conda , entonces sabe que puede (y debe) crear entornos de 
conda para su trabajo, en lugar de instalar todo en su propio instalación del sistema Por lo tanto, puede obtener una comprensión clara de las dependencias que tiene su proyecto (y esta es una buena razón para usar 
miniconda en lugar de 
anaconda completa, ya que la primera es menos de una décima parte del volumen de la segunda).
Siempre hay contenedores
Trabajar en un contenedor es una forma de no tratar con el medio ambiente en absoluto, ya que toda su "máquina" se convertirá en un entorno separado. Hasta que haya instalado Python en el sistema de contenedor, debería poder realizar una instalación global de manera segura para que su contenedor siga siendo simple y directo.
Repito que realmente entiendes la esencia ... 
¡No instale nada en su intérprete global de Python! ¡Siempre trate de usar el medio ambiente para el desarrollo local!Ya no puedo decir cuántas veces tuve que ayudar a alguien que pensaba que el pip se instaló en un intérprete de Python, pero en realidad se instaló en otro. Y esta cantidad inconmensurable también se aplica a esos momentos en que las personas rompieron todo el sistema o se preguntaron por qué no podían instalar algo que contradiga otra cosa que habían establecido anteriormente para otro proyecto, etc. debido al hecho de que no se molestaron en configurar el entorno en su máquina local.
Por lo tanto, para que usted y yo podamos dormir tranquilos, use 
python-m pip e intente usar siempre el entorno.