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.