這次需要把 python 的程式丟到一個沒有裝 python 環境去,所以需要打包它。
預期的目標是不要事先安裝 python。
為了文章閱讀流暢,一些可選的手法就容後再補充了,免得原來是說明文的,變成手冊文。
我的環境是 windows 7, python 2.7, pyinstaller 2.1。
首先尋找 pyinstall 這個程式。從 pypi 下載 zip 檔。
https://pypi.python.org/packages/source/P/PyInstaller/PyInstaller-2.1.zip#md5=3eb18a454311707ab7808d881e677329
把它解開放到任何你想要的目錄。
然後在那裡開個命令列視窗,執行 setup.py install
安裝完之後,會在 C:\Python27\Scripts 的目錄裡,有 pyinstaller.exe。
然後在那裡開個命令列視窗,執行 pyinstaller --version
看到 2.1 的數字跑出來,就是安裝成功了。
在完成安裝之後,在 C:\Python27\Scripts 裡,會同時有以下的執行檔。
- pyinstaller
- pyi-makespec
- pyi-build
- pyi-archive_viewer
- pyi-bindepend
- pyi-grab_version
- pyi-make_comserver
為了方便,請記得將 C:\Python27\Scripts 加到 windows 的執行路徑裡。
接下來實際做一個例子來試用 pyinstaller。
程式的功能,目前先設計為:
- 讀取外部的 json 檔裡的路徑設定
- 列出該路徑下的所有的專案檔 (結尾是 vbproj)
所以,打開 IDLE,寫 python 程式如下 path_info.py:
import json
import os
path_info_path = 'path_info.json'
path_info = []
def read_info():
global path_info
f = open(path_info_path,'r')
path_info = json.load(f)
f.close()
vbproj_list = []
def get_vbproj_list():
global vbproj_list
for path in path_info:
for root,dirs,files in os.walk(path):
for i in files:
if i.endswith('.vbproj'):
vbproj_list.append(os.path.join(root,i))
if __name__ == '__main__':
read_info()
get_vbproj_list()
for i in vbproj_list:
print i
path_info.json 裡面的內容也準備好。
[
".",
"..\\tmp\\"
]
打開命令列,位置換到 path_info.py 的位置
執行 >pyinstaller path_info.py
在一連串的輸出之後,在 dist 裡面會有 path_info 的目錄,裡頭就是執行所需的檔案,會有一個 path_info.exe,因此這一包 zip 起來就可以傳給其他人用。
如果希望是全部打包在一個檔案,就執行 >pyinstaller path_info.py -F
這樣,在 dist 裡面,就會有一個 path_info.exe,這個可以直接給別人用了。
參考:
https://github.com/pyinstaller/pyinstaller/wiki
http://pythonhosted.org/PyInstaller/
http://blog.float.tw/2013/10/use-pyinstaller-packages-python-programs.html