usar “pip instalar / desinstalar” dentro de un script de python

¿Cómo, dentro de un script de python puedo instalar paquetes usando pip? No uso el os.system, quiero importar pip y usarlo.

No es una buena idea instalar paquetes dentro del script de Python porque requiere derechos de root. Debería enviar módulos adicionales junto con el script que creó o verificar si el módulo está instalado:

try: import ModuleName except ImportError: print 'Error, Module ModuleName is required' 

Si insiste en instalar el paquete usando pip dentro de su script, tendrá que buscar en la call desde el módulo de subprocess (” os.system() ” está en desuso).

No hay un módulo pip, pero puede crear uno fácilmente usando el método anterior.

Creo que esas respuestas están desactualizadas. De hecho puedes hacer:

 import pip failed = pip.main(["install", nameOfPackage]) 

e inserte cualquier argumento adicional en la lista que pase a main (). Devuelve 0 (fallido) o 1 (éxito)

Jon

pip.main () ya no funciona en pip versión 10 y superiores. Necesitas usar:

 from pip._internal import main as pipmain pipmain(['install', 'package-name']) 

Para la compatibilidad hacia atrás puede utilizar:

 try: from pip import main as pipmain except ImportError: from pip._internal import main as pipmain 

Si está detrás de un proxy , puede instalar un módulo dentro del código de la siguiente manera …

 import pip pip.main(['install', '--proxy=user:password@proxy:port', 'packagename']) 

Este es un comentario a esta publicación que no encajó en el espacio asignado a los comentarios.

Tenga en cuenta que el caso de uso de la instalación de un paquete puede surgir dentro de setup.py . Por ejemplo, generar tablas de análisis de ply y almacenarlas en el disco. Estas tablas deben generarse antes de que se ejecute setuptools.setup , ya que deben copiarse en site_packages de site_packages , junto con el paquete que se está instalando.

Existe la opción setup_requires de setuptools.setup , sin embargo eso no instala los paquetes.

Por lo tanto, una dependencia que se requiere tanto para el proceso de instalación como para el paquete instalado no se instalará de esta manera.

Colocar una dependencia de este tipo dentro de install_requires no siempre funciona como se espera . Incluso si funcionara, uno tendría que pasar alguna función a setuptools.setup , para ejecutarse entre la instalación de dependencias en setup_requires y la instalación del paquete en sí. Este enfoque está nested, y por lo tanto contra PEP 20 .

Así que los dos enfoques planos que quedan, son:

  1. ejecute setup.py dos veces, ya sea automáticamente (preferido) o manualmente (notificando al usuario que las tablas no se pudieron comstackr antes de setuptools.setup .

  2. Primero llame a pip (o alguna otra solución equivalente) para instalar las dependencias necesarias. Luego continúe con la construcción de las tablas (o cualquier tarea previa a la instalación) y llame a setuptools.setup last.

Personalmente, prefiero el No.2, porque el No.2 puede confundir a un usuario que observa la salida de la consola durante la instalación, a menos que ya sepa la intención de llamar a setuptools.setup dos veces.

Además, los derechos necesarios para la instalación (por ejemplo, root, si así se desea), están presentes cuando se ejecuta setup.py (y exactamente en ese momento). Por setup.py tanto, setup.py podría considerarse como el caso de uso “canónico” para este tipo de acción.

Utilicé os.system para emular el terminal instalando un módulo pip (sé que os.system está en desuso, pero todavía funciona y también es la forma más fácil de hacerlo), por ejemplo, estoy haciendo un motor de juego que tiene varios Los scripts de Python que todos usan Pygame, en el archivo de inicio, uso este código para instalar pygame en el sistema del usuario si no lo tienen:

 import os os.system('pip install pygame') 

Desafortunadamente, no sé cómo instalar pip si no lo tienen, por lo que este script depende de pip.

Puedes ejecutar pip dentro de un script de python:

 import pip pip.main(['install', 'packagename'])