2015年9月10日 星期四

[python] pyinstall 在 windows 上的安裝使用

這次需要把 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 的執行路徑裡。

image

 

接下來實際做一個例子來試用 pyinstaller。

程式的功能,目前先設計為:

  1. 讀取外部的 json 檔裡的路徑設定
  2. 列出該路徑下的所有的專案檔 (結尾是 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

沒有留言:

張貼留言