¿Por qué usar python -m pip?

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.

Source: https://habr.com/ru/post/475392/


All Articles