最近剛接手幾臺windows伺服器,寫了幾個自動備份數據的python腳本,要放到windows下去執行,一般來說如果要windows能執行python腳本,第一要在windows機器上安裝python ,另外還要配置windows環境變量能讓腳本執行,如果1~2臺windows還好,如果上百臺都要安裝python,然後在設置環境變量,估計要瘋,當然如果再寫一個安裝程序、部署環境變量,我估計也不是不可能,不過總體來說還是比較麻煩,本著在windows伺服器上軟體能不裝就不多裝的原則,把寫好的.py文件直接轉成exe可執行文件,直接放到windows系統中進行執行不就可以了麼,那如何轉換成exe 呢, 我之前只聽說可以用py2exe,所以就上網找了些文檔看了下,發現操作還是相對比較複雜,就想找更簡單的方法,經過不懈努力發現,終於讓我找到了今天的主角PyInstaller,匆忙掃了一遍官網內容,發現真的比較牛X,現在的版本目前支持py2.7和3.3+,可以支持不同系統,而且方便使用,我就把整個過程給大家介紹下:
安裝:
1、方式一可以通過pip 或easy_install 來進行安裝,這種方式會省去很多其它麻煩,在安裝的時候需要的pywin32-219.win32-py2.7.exe依賴包也會自動被安裝。
2、通過下載打包的程序文件安裝,這種安裝前要先手動下載pywin32-219.win32-py2.7.exe,下載地址http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/,下載完成後雙擊安裝。
然後下載PyInstaller, 下載地址:https://pypi.python.org/pypi/PyInstaller/
完成後解壓,進入目錄PyInstaller-3.0內(我下載的是最新的版本PyInstaller-3.0.tar.gz),在cmd中進入該目錄,然後在cmd中運行命令:
python setup.py install
注意,如果你不是windows,linux,mac os ,你要多建立一個bootloader,因為我是windows環境,所以我沒用到,具體官網原文:
For platforms other than Windows, Linux and Mac OS, you must first build a bootloader program for your platform: see Building the Bootloader. After the bootloader has been created, use python setup.py install with administrator privileges to complete the installation.
到此PyInstall就安裝完畢了。
腳本編寫:
編寫pyhon腳本,命名為echo.py, 因為是測試,所以我簡單些了一個,主要是為演示方便:
import time
def hell():
print 'hello py'
for i in range(100):
print i
time.sleep(5)
if __name__ == '__main__':
hell()
之所以寫一個循環,是為方便看到執行的過程,如果不sleep,可能一霎哪就過去了,自己都不知道執行沒執行。
生成exe文件:
將echo.py 拷貝到PyInstaller-3.0目錄下,打開cmd進入PyInstaller-3. 0目錄,在cmd環境下執行:
pyinstaller.py -F echo.py
執行運行.py文件,記得添加環境變量,執行完畢你可以在 發現在當前目錄下多了一個echo目錄,進入後再進入dist目錄中,發現已生成echo.exe文件,這個文件就是可執行文件,可以拷貝到其它機器上去執行。
參數介紹:
-F, --onefile Create a one-file bundled executable.
-p DIR, --paths=DIR
A path to search for imports (like using PYTHONPATH). Multiple paths are allowed, separated by ':', or use this option multiple times
其中-p 指定導入的模塊。
其中m3.ico是從網上下載的圖標圖片,是美國隊長的一個卡通版圖,運行完後再看看生成的echo.py文件圖標,是不是有種定製的感腳,今天就寫到這裡了,睡覺了,明天早起。寫到這本來是要完了,不過我發現生成的程序圖標是默認的,沒有特色,又看了看文檔,發現可以自定義程序圖標,心裡一陣竊喜,分享如下:
pyinstaller.py -F echo.py -i m3.ico