1. 程式人生 > >[PYTHON]_ELVE_Python原始碼檔案編譯成可執行檔案(支援macOS High Sierra和window 10)

[PYTHON]_ELVE_Python原始碼檔案編譯成可執行檔案(支援macOS High Sierra和window 10)

#0x01 背景

這兩天寫了一個抽獎的Python指令碼,要生成可執行檔案,總不能一直在sublime上執行吧,或者執行前先安裝Python,所以就查了一下怎麼生成可執行檔案,本篇包括mac下和win下,經本人測試,mac下生成.app(mac下的可執行檔案為.app字尾)較win下容易一些。

我用的Python版本為:macOS下3.7,win下3.6;系統版本為:macOS 10.13 ;windows 10;

#0x02 準備工作

macOS下:mac下比較容易,僅需下載一個pyinstaller就可以了。在終端下輸入命令列

pip install pyinstaller

windows下:windows下比較麻煩一些,需要先安裝pywin32,再安裝pyinstaller,故執行順序為:

1.在pywin32的github上下載對應版本安裝:網站連結,最好下載最新的版本,我下的是224版本,下載好後安裝;

在安裝過程中如果出現找不到Python模組,可以將下面的Python程式碼執行一下,親測可用(這是網上一位大神寫得程式碼,具體出處找不到了,如遇作者請聯絡我標明,謝謝)。

import sys

from winreg import *

# tweak as necessary
version = sys.version[:3]
installpath = sys.prefix

regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\
" % (version) installkey = "InstallPath" pythonkey = "PythonPath" pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % ( installpath, installpath, installpath ) def RegisterPy(): try: reg = OpenKey(HKEY_CURRENT_USER, regpath) except EnvironmentError as e: try: reg = CreateKey(HKEY_CURRENT_USER, regpath) SetValue(reg, installkey, REG_SZ, installpath) SetValue(reg, pythonkey, REG_SZ, pythonpath) CloseKey(reg)
except: print("*** Unable to register!") return print("--- Python", version, "is now registered!") return if (QueryValue(reg, installkey) == installpath and QueryValue(reg, pythonkey) == pythonpath): CloseKey(reg) print("=== Python", version, "is already registered!") return CloseKey(reg) print("*** Unable to register!") print("*** You probably have another Python installation!") if __name__ == '__main__': RegisterPy()
View Code

2.下載pyinstaller,這裡和mac一樣,直接pip安裝

pip install pyinstaller

注:pip版本為9.多少來著以上最好,現在應該已經到了18以上

#0x03 編譯生成

在以上步驟安裝好後,就可以進行編譯生成檔案(注:mac下生成的檔案只能在mac下執行,windows下生成的檔案也只能在windows下執行)

1.首先切換到專案的目錄,也就是Python指令碼的位置

cd 指令碼的位置

2.使用pyinstaller生成

pyinstaller test.py

可以看到,現在已經生成若干檔案和資料夾,在dist資料夾下就可以找到與Python檔案同名的可執行檔案,(mac下為test.app,win下為test.exe)

3.每次執行都需要開啟命令列視窗怎麼辦,而且檔案眾多,不好找,所以可以使用下面的程式碼,(這個是我自己比較常用的程式碼)

pyinstaller -F -w test.py

這裡-F指的是生成僅一個檔案,-w指的是不開啟命令列視窗。

#0x04 另附pyinstaller常用命令

連線地址

注:-i命令需要.ico圖示