Instalación del módulo python dentro del código

Necesito instalar un paquete de PyPi directamente en mi script. Tal vez haya algún módulo o distutils distribute ( pip , etc.) que me permita ejecutar algo como pypi.install('requests') y las solicitudes se instalarán en mi virtualenv.

También puedes usar algo como:

 import pip def install(package): if hasattr(pip, 'main'): pip.main(['install', package]) else: pip._internal.main(['install', package]) # Example if __name__ == '__main__': install('argh') 

La solución de Rickard no es compatible con el equipo de desarrollo de pip y se bloqueará en algunos casos (por ejemplo, multiproceso). Además, desde el pip 10, el código se ha movido a pip._internal para dejar claro que esto no es compatible. Esta solución fallará con un error de importación en “pip> = 10.0.0”.

La solución de Quantum es la forma preferida de resolver el problema, sin embargo, su implementación no garantiza que llamará al pip correcto.

Esta solución garantiza que llama al pip del intérprete de Python que ejecuta el código.

 import subprocess import sys def install(package): subprocess.call([sys.executable, "-m", "pip", "install", package]) 

Hace lo mismo que la solución de Quantum; sin embargo, en lugar de ejecutar pip directamente, ejecuta el mismo ejecutable de Python ejecutando el código y le dice que ejecute el módulo pip que ha instalado y le pasa el rest de los argumentos.

Si desea usar pip para instalar el paquete requerido e importarlo después de la instalación, puede usar este código:

 def install_and_import(package): import importlib try: importlib.import_module(package) except ImportError: import pip pip.main(['install', package]) finally: globals()[package] = importlib.import_module(package) install_and_import('transliterate') 

Si instaló un paquete como usuario, puede encontrar el problema de que simplemente no puede importar el paquete. Ver ¿Cómo actualizar sys.path? para informacion adicional.

Esto debería funcionar:

 import subprocess def install(name): subprocess.call(['pip', 'install', name]) 

Usted define el módulo dependiente dentro de setup.py de su propio paquete con la opción “install_requires”.

Si su paquete necesita tener algún script de consola generado, puede usar el punto de entrada “console_scripts” para generar un script de contenedor que se colocará dentro de la carpeta ‘bin’ (por ejemplo, de su entorno virtualenv).

Espero que esta pregunta siga siendo válida. Hice lo anterior algo como esto:

  import sys import os import site try: import pip except ImportError: print "installing pip" cmd = "sudo easy_install pip" os.system(cmd) reload(site) try: import requests except ImportError: print "no lib requests" import pip cmd = "sudo pip install requests" print "Requests package is missing\nPlease enter root password to install required package" os.system(cmd) reload(site) 

el segundo bloque de bash también puede escribirse en la parte “else” del primer bloque de bash, sin embargo, en mi statement de problema, tengo que escribir dos bloques separados.

Supongo que tenemos un pip en nuestra máquina e intentaremos detectar la dependencia específica que falta … intente este método y hágame saber lo que piensa.

 import os try: import something ..... ..... except ImportError as e: pip = lambda : os.system('pip install' + str(e)[15:]) pip() 

Además, considere trabajar con el módulo pip sí mismo si utiliza las funciones lambda para aplicar el mecanismo de importación “autoconsciente”. Simplemente siguiendo este fragmento de código 🙂

 try: import somthing .......... .......... except ImportError as e: # importing pip module to handle pip functionalites import pip # create a lambda that import using pip by module_error_name=e[15:] installer = lambda : pip.main(['install', str(e)[15:]) # create a lambda that import a module by linear_lambda_call importer = lambda x : __import__(str(x)).import_module() # install the module installer() # import the module importer() 

Se puede instalar usando el módulo sys un pozo

 import sys !{sys.executable} -m pip install  --user 

Utilizo os.system para emular un terminal os que importa un módulo porque entonces, puede usar el módulo en todos los demás scripts.

Por ejemplo, estoy creando un motor de juego que se ejecuta en secuencias de comandos separadas y juntas, la mayoría de estas secuencias de comandos usan Pygame y si el usuario no tiene pygame, el archivo de inicio lo agregará con este código:

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

Desafortunadamente, no tengo idea de cómo introducir pip en la máquina del usuario, por lo que esto depende de que el usuario tenga pip.

Así es como instalo todos los paquetes para mis proyectos .

Solo agregue todos los nombres a la lista y ejecute uno antes de ejecutar el código principal.

¡Combinar esto con el uso de “venv” es genial!

 """call this module to setup your python packages via pip""" from pip._internal import main as pip pip_install_argument = "install" # packages to install packages_to_install = [ "numpy", # math magic 1 "scipy", # math magic 2 ] def install(packages): """installes given packages via pip Args: package names as list Returns: None """ global pip_install_argument for package in packages: pip([pip_install_argument, package]) if __name__ == '__main__': install(packages_to_install) 

Como el módulo de pip importable no siempre funciona, hay una forma más robusta:

 def PackageInstall(error): ''' Finds out which package is missing and downloads it automatically after five seconds. Use example: try: import numpy as np import matplotlib.pyplot as plot except ImportError as error: PackageInstall(error) ''' import time, subprocess, os, sys lib = str(error)[15:].replace('\'', '') print('>>>',str(error)) print('>>> Download will start after five seconds') time.sleep(5) subprocess.call("pip install " + lib) print('>>> Restarting') os.startfile(__file__) sys.exit() 

Esto funciona en Windows.

siempre podrias descargar

 import os 

luego a la derecha todos los comandos de terminal para descargarlo desde allí.

me gusta

 while True: code = input("") os.system("code") 

sea ​​lo que sea, no estoy seguro, pero si ni siquiera sabes cómo hacerlo en la terminal, ¿cómo lo harás en Python?