2013-09-21 102 views
1

我有一個使用paramiko模塊的python代碼。默認情況下,paramiko未安裝,爲了確保代碼始終運行,我需要添加某種安全的導入方法,嘗試導入模塊,並在失敗的情況下嘗試安裝它。什麼是達到下一個等效代碼的最pythonic方法?安裝模塊以防萬一丟失

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

這顯然不是一個跨平臺的代碼,它會在Windows,Mac OS,甚至Linux發行版失敗沒有yum。事實上,我不能確定運行腳本的python版本是否可用,因此importlib將不可用。解決這些問題的一般pythonic方法是什麼?

+2

可能最好的解決方案是創建適當的Python包並在您的安裝文件中列出需求。 – zero323

回答

1

這樣做的最Python的方式是

import paramiko 

這將產生以下輸出。

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named paramiko 

用戶可以做出明智的決定如何將它安裝在他們的系統上。當然,您可以打包軟件,以便爲其安裝paramiko

+0

用戶只需要知道如何使用軟件,他們不關心'paramiko'或任何安裝程序,他們只是想用最少的頭痛來使用軟件。使用'pyinstaller'打包軟件是我正在考慮的一個選項,它可能正常工作,但我試圖避免分發二進制文件。話雖如此,我不同意一個肯定會導致'ImportError'的代碼確實是pythonic。 – e271p314

+0

@ e271p314用戶如何安裝軟件?您的軟件*絕對*不應該爲用戶安裝軟件。 –

+0

我希望它的工作方式是用戶只需下載腳本並立即使用它 – e271p314