Python 安装模块以防丢失

Python 安装模块以防丢失,python,import,cross-platform,Python,Import,Cross Platform,我有一个使用paramiko模块的python代码。默认情况下,未安装paramiko,为了确保代码始终运行,我需要添加某种安全导入方法,尝试导入模块,如果失败,将尝试安装模块。实现与以下代码等价的代码的最具python风格的方法是什么 import os, importlib def SafeImport(module): while True: try: module = importlib.import_module(module)

我有一个使用paramiko模块的python代码。默认情况下,未安装paramiko,为了确保代码始终运行,我需要添加某种安全导入方法,尝试导入模块,如果失败,将尝试安装模块。实现与以下代码等价的代码的最具python风格的方法是什么

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')

这显然不是一个跨平台的代码,如果没有
yum
,它将在windows、mac os甚至linux发行版上失败。事实上,我无法确定运行该脚本的python版本是什么,因此它可能无法使用
importlib
。解决这些问题的一般python方法是什么?

最python的方法是

import paramiko
这将产生以下输出

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named paramiko
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:没有名为paramiko的模块

然后,用户可以就如何在系统上安装它做出智能决策。当然,您可以对软件进行打包,以便为它们安装
paramiko

最具python风格的方法是

import paramiko
这将产生以下输出

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named paramiko
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:没有名为paramiko的模块

然后,用户可以就如何在系统上安装它做出智能决策。你当然可以,打包您的软件,以便为他们安装
paramiko

最好的解决方案可能是创建适当的Python包并在安装文件中列出要求。最好的解决方案可能是创建适当的Python包并在安装文件中列出要求。用户只需知道如何使用软件,他们不关心paramiko或任何安装程序,他们只想用最省心的软件。使用
pyinstaller
打包软件是我正在考虑的一个选项,它可能工作得很好,但我试图避免分发二进制文件。话虽如此,我不同意肯定会导致
importorror
的代码是真正的pythonic。@e271p314用户将如何安装您的软件?你的软件绝对不应该为用户安装软件。我希望它的工作方式是用户只需下载脚本就可以使用它immediately@e271p314如果您希望用户这样做,他们将是经验丰富的开发人员,因此可以自行安装
paramiko
。如果有人为我安装了一个模块,我会非常生气-至少使用类似于
distutils
的东西并将其打包。他们很可能根本不是开发人员,只是普通用户。用户只需要知道如何使用软件,他们不关心
paramiko
或任何安装过程,他们只想用最简单的软件。使用
pyinstaller
打包软件是我正在考虑的一个选项,它可能工作得很好,但我试图避免分发二进制文件。话虽如此,我不同意肯定会导致
importorror
的代码是真正的pythonic。@e271p314用户将如何安装您的软件?你的软件绝对不应该为用户安装软件。我希望它的工作方式是用户只需下载脚本就可以使用它immediately@e271p314如果您希望用户这样做,他们将是经验丰富的开发人员,因此可以自行安装
paramiko
。如果有什么东西为我安装了一个模块,我会非常生气——至少使用像
distutils
这样的东西并打包。他们很可能根本不是开发人员,只是普通用户。