modulos - Instalar el módulo python dentro del código
lista de modulos de python (10)
Necesito instalar un paquete de PyPi directamente dentro de 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.
Espero que esta pregunta aún sea 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 try también se puede escribir en la parte else del primer bloque try, sin embargo, en el enunciado de mi problema, tengo que escribir dos bloques separados.
Esto debería funcionar:
import subprocess
def install(name):
subprocess.call([''pip'', ''install'', name])
La solución de Rickard no es compatible con el equipo de desarrollo de pip y se bloqueará en algunos casos (p. Ej., Múltiples hilos). Además, dado que el pip 10 el código se ha movido a pip._internal
para dejar en 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 llame 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 de pip que tiene instalado y le pasa el resto de los argumentos.
Puede instalar usando un módulo sys
import sys
!{sys.executable} -m pip install <package> --user
Si desea utilizar 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 no puede importar el paquete. Consulte Cómo actualizar sys.path? para informacion adicional.
Supongo que tenemos una pipa en nuestra máquina e intentaremos detectar la dependencia específica que falta. Pruebe este método y dígame qué opina.
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 usa funciones lambda
para aplicar el mecanismo importador "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()
También puedes usar algo como:
import pip
def install(package):
pip.main([''install'', package])
# Example
if __name__ == ''__main__'':
install(''argh'')
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, entonces puede usar el punto de entrada "console_scripts" para generar un script contenedor que se colocará dentro de la carpeta ''bin'' (por ejemplo, de su entorno virtualenv).
Utilizo os.system
para emular un terminal os.system
importando un módulo porque entonces, puede usar el módulo en todos los otros scripts.
Por ejemplo, estoy creando un motor de juego que se ejecuta en scripts separados, la mayoría de estos scripts usan Pygame y si el usuario no tiene pygame, el archivo de inicio lo agregará usando este código:
import os
os.system(''pip install pygame'')
Lamentablemente, no tengo idea de cómo obtener pip en la máquina del usuario, así que esto depende de que el usuario tenga pip.
siempre puedes descargar
import os
luego, a la derecha, todos los comandos del 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 vas a hacerlo en Python?