Instalación del módulo python dentro del código
Necesito instalar un paquete de PyPI directamente dentro de mi script.
Tal vez hay algún módulo o distutils
(distribute
, pip
etc.) característica que me permite simplemente ejecutar algo como pypi.install('requests')
y las solicitudes se instalarán en mi virtualenv.
10 answers
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')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-17 11:37:29
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 ha instalado un paquete como usuario, puede encontrar el problema de que no puede simplemente importar el paquete. Vea Cómo actualizar sys.¿camino? para más información.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:30
La solución de Rickard no es compatible con el equipo de desarrollo de pip y se bloqueará en algunos casos (por ejemplo, multi threaded). Además, desde 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 el pip del intérprete 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 resto de los argumentos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-09 13:47:15
Esto debería funcionar:
import subprocess
def install(name):
subprocess.call(['pip', 'install', name])
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-08 17:52:29
Se define el módulo dependiente dentro del setup.py de su propio paquete con la opción" install_requires".
Si su paquete necesita generar algún script de consola, puede usar el punto de entrada" console_scripts " para generar un script de envoltura que se colocará dentro de la carpeta' bin ' (por ejemplo, de su entorno virtualenv).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-08 17:38:59
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 try también se puede escribir en la parte else del primer bloque try, sin embargo en mi declaración problem tengo que escribir dos bloques separados.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-12 11:38:38
Asumo que tenemos un pip en nuestra máquina, y trataremos de atrapar la dependencia específica que falta.. prueba este método y hazme saber lo que piensas.
import os
try:
import something
.....
.....
except ImportError as e:
pip = lambda : os.system('pip install' + str(e)[15:])
pip()
También,
por favor considere trabajar con el propio módulo pip
si usa las funciones lambda
para aplicar el mecanismo de importador "autoconciente". 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()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-08 19:17:55
Puede instalar usando el módulo sys un pozo
import sys
!{sys.executable} -m pip install <package> --user
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-07 17:01:10
Utilizo el os.system
para emular un terminal del sistema operativo que importa 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 agregados juntos, 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')
Desafortunadamente, no tengo idea de cómo obtener pip en la máquina del usuario, por lo que esto depende de que el usuario tenga pip.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-14 10:52:03
Siempre puedes descargar
import os
Luego a la derecha todos los comandos de terminal para descargarlo desde allí.
Como
while True:
code = input("")
os.system("code")
Sea lo que sea, no estoy seguro, pero si ni siquiera sabes cómo hacerlo en terminal, cómo lo harás en python.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-01 21:32:09