2012-08-22 72 views
1

有沒有辦法有一個Python程序,告訴用戶它需要一個模塊來運行,那麼該程序可以安裝它爲用戶從Python程序中安裝模塊

+0

是否可能安裝了pip或easy_install的用戶? –

+0

雖然這是可能的,但這並不意味着自動安裝東西是一個好主意。這樣的解決方案將有傳播惡意軟件的巨大潛力。 –

+0

用戶不會安裝pip或easy_installer,並且程序會在安裝之前請求權限。 – gevvek

回答

0

您可以創建一個嘗試的功能加載特定的模塊,如果無法加載,請爲用戶提供手動下載的指導,或者腳本自動下載模塊。

2

你可以捕獲ImportError異常來告訴用戶程序需要某個模塊;

try: 
    import numpy as np 
except ImportError: 
    print "This program requires numpy!" 
    print "Please download it from http://numpy.scipy.org/ and install it" 
    print "before running this program." 
    exit(1) 

請注意,這只是一種以更好的方式退出程序,而不會出現用戶可能不清楚的回溯。如果無法找到該模塊,則無論如何都會引發異常。

您應該只對不屬於python標準庫的模塊執行此操作。

試圖自動安裝它不是一個好主意。首先是因爲它具有安全風險(散播惡意軟件的好方法),其次是因爲不同的操作系統或發行版有不同的處理和註冊軟件安裝的方法。

+0

你認爲你可以告訴我如何在許可下安裝嗎?這個程序只需要在linux上運行。 – gevvek

+0

安裝可能非常複雜。你想使用哪個軟件包管理器?對於哪種發行版的linux?你使用'virtualenv'嗎?這些問題和更多使這變得複雜。要安裝在系統範圍的python目錄中,您可能需要root權限。另外,作爲一個系統管理員,如果軟件試圖在我不知情的情況下嘗試安裝其他的東西,並且與我使用的任何機制分離以使所有安裝的軟件保持最新,我當然不會很喜歡它。 –

-1

您可以使用

import os 
os.system('[sudo] [install whatever]') 

安裝你需要哪個模塊......它會提示輸入管理員密碼的用戶,如果它不具有admin PRIVS

http://forums.devshed.com/python-programming-11/running-bash-command-110687.html

編輯:

按照馬修特雷弗的建議,你也可以嘗試添加你的依賴爲這篇文章http://www.siafoo.net/article/77

+0

操作系統之間安裝附加軟件的細節差異很大。另外,您可能需要超級用戶(管理員)權限才能在全局安裝。 –

+0

hmm,do pip/easy_install覆蓋了系統之間安裝要求的大部分變化,b/c然後@gevvek可以提示用戶安裝它,然後使用它們來安裝任何其他模塊 –

+0

是和否。如果操作系統使用軟件包管理系統(就像大多數Linux發行版一樣),那麼'setuptools','pip'和'easy_install'將安裝一個軟件包,而不用將其註冊到軟件包管理系統。從長遠來看,這對系統管理員來說是個麻煩,因爲他現在必須保持最新的兩套軟件包。也許紅寶石,perl模塊等等... –

0

這並不完全回答你的問題中所描述的setup.py,但我認爲這可能是答案要什麼。如果可能的話,我建議不要編輯用戶安裝的模塊,如果您只是需要它們才能運行腳本,那麼您應該考慮PyInstaller,它將您的程序捆綁到.exe文件中。

如果您正在創建一個設置腳本來配置某人的機器,這顯然不會起作用,否則它可能是一個好主意。