Instalación de un módulo en caso de que falte
Frecuentes
Visto 144 veces
1
Tengo un código python que usa el módulo paramiko. Por defecto, paramiko no está instalado y para asegurarme de que el código siempre se ejecutará, necesito agregar algún tipo de método de importación seguro que intente importar el módulo y, en caso de falla, intentará instalarlo. ¿Cuál es la forma más pitónica de lograr un código equivalente al siguiente?
import os, importlib
def SafeImport(module):
while True:
try:
module = importlib.import_module(module)
return module
except Exception as e:
print module + ' is not installed, you will need root privileges to install it. ' + str(e)
os.system('sudo yum --assumeyes install python-pip python-devel')
os.system('sudo pip install ' + module)
paramiko = SafeImport('paramiko')
Claramente, este no es un código multiplataforma, fallará en Windows, Mac OS e incluso en distribuciones de Linux sin yum
. De hecho, no puedo estar seguro de qué versión de python ejecutará el script, por lo que es posible que importlib
no estará disponible para ello. ¿Cuál es la forma pitónica general de abordar tales problemas?
1 Respuestas
1
La forma más pitónica de hacer esto es
import paramiko
Esto produce la siguiente salida.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named paramiko
Luego, los usuarios pueden tomar una decisión inteligente sobre cómo instalarlo en su sistema. Por supuesto, puede empaquetar su software para que paramiko
está instalado para ellos.
Respondido el 21 de Septiembre de 13 a las 12:09
Los usuarios solo necesitan saber cómo usar el software, no les importa paramiko
o cualquier procedimiento de instalación, solo quieren usar el software con un dolor de cabeza mínimo. Empaquetar el software con pyinstaller
es una opción que estoy considerando y podría funcionar bien, pero estaba tratando de evitar la distribución de archivos binarios. Habiendo dicho eso, no estoy de acuerdo con que un código que que probar definitivamente porque ImportError
es verdaderamente pitónico. - e271p314
@e271p314 ¿Cómo va a instalar un usuario su software? tu programa que probar definitivamente no debe instalar software para los usuarios. - alex chambelán
La forma en que quiero que funcione es que el usuario simplemente descargue el script y pueda usarlo de inmediato: e271p314
@e271p314 Si espera que los usuarios hagan eso, serán desarrolladores experimentados y, como tales, pueden encargarse de la instalación paramiko
ellos mismos. Estaría bastante enojado si algo instalara un módulo para mí, al menos use algo como distutils
y empaquetarlo. - alex chambelán
Lo más probable es que no sean desarrolladores en absoluto, solo usuarios regulares. - e271p314
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python import cross-platform or haz tu propia pregunta.
Probablemente la mejor solución sea crear un paquete de Python adecuado y enumerar los requisitos dentro de su archivo de instalación. - zero323