如何做一個任何電腦都能用的python程式?
- 2019 年 10 月 8 日
- 筆記
有時候你做好了一個小遊戲或者小程式想要打包發送給別人玩或者用的時候,直接發過去,如果別人沒有python環境的話,那肯定是用不了的,這時候你需要將程式打包成exe程式。
將python打包成exe的方法有兩種,一種是pyinstaller,另一種是py2exe.
兩者各有優缺點,不過現在大部分都使用pyinstaller去打包exe,為什麼不用py2exe,後面你就知道了。
關於pyinstaller
首先是用pyinstaller去打包python程式,這裡我用的python程式是python—貪吃蛇的程式碼。
要使用pyinstaller,首先先安裝pywin32,然後再安裝pyinstaller,安裝方法直接用pip安裝即可。pyinstaller也是支援python3.7的,所以可以放心使用,但是對於其他的庫,可能就會有版本問題,所以很容易出錯。
pip install pywin32
pip install pyinstaller
安裝pyinstaller好後

使用pyinstaller的方法也很簡單,用cmd窗口也行,這裡我用的是在pycharm里,如果用cmd的話需要先cd到項目的目錄下面,然後在輸入
pyinstaller -F -w 程式名.py。在pycharm環境下, 首先打開terminal。

然後這裡本身就是項目文件下面了,所以不用cd過去,直接在這裡輸入,pyinstaller -F -w 程式名.py
然後等待出現成功字樣即可

這樣就打包成功了。然後去項目文件下,會發現新增了三個東西,兩個文件夾和一個spec文件


然後我們的exe文件就在dist文件下面,雙擊打開就可以運行了。

因為沒加圖標,所以這裡默認是這個圖標,當然可以自己修改。
下面是一些常用的命令
-h,–help |
查看該模組的幫助資訊 |
---|---|
-F,-onefile |
產生單個的可執行文件 |
-D,–onedir |
產生一個目錄(包含多個文件)作為可執行程式 |
-a,–ascii |
不包含 Unicode 字符集支援 |
-d,–debug |
產生 debug 版本的可執行文件 |
-w,–windowed,–noconsolc |
指定程式運行時不顯示命令行窗口(僅對 Windows 有效) |
-c,–nowindowed,–console |
指定使用命令行窗口運行程式(僅對 Windows 有效) |
-o DIR,–out=DIR |
指定 spec 文件的生成目錄。如果沒有指定,則默認使用當前目錄來生成 spec 文件 |
-p DIR,–path=DIR |
設置 Python 導入模組的路徑(和設置 PYTHONPATH 環境變數的作用相似)。也可使用路徑分隔符(Windows 使用分號,Linux 使用冒號)來分隔多個路徑 |
-n NAME,–name=NAME |
指定項目(產生的 spec)名字。如果省略該選項,那麼第一個腳本的主文件名將作為 spec 的名字 |
如果還想要去查看更詳細的指令,可以用pyinstaller -h查看
所以根據上表,創建單個執行文件,且不顯示命令行窗口的程式就是
pyinstaller -F -w 程式名.py
如果想要給程式換一個圖標可以加個-i
pyinstaller -F -w -i 圖標文件名 程式名.py
打包後之後你的項目會出現兩個文件夾,分別是build和dist,以及一個spec文件。
有時候打包之後會出現這個問題,

在我這裡就是版本問題,把numpy回退一下版本,換成低一點的版本即可。
有的時候可能是因為沒有模組之類的,你可以將-w去掉,然後就可以看彈出的命令行窗口顯示的是什麼錯誤,解決後重新打包即可。
當你運行打包後的程式出錯的時候,可以去pyinstaller的官方手冊下面查看,是否有一致的問題。
官方手冊:https://pyinstaller.readthedocs.io/en/stable/when-things-go-wrong.html

正如我剛剛說的,他這裡提供了一些debug的方法。
我們打包的時候會出現的一個spec文件,
一個spec文件的內容:

這是一個規範文件,摘手冊的話來說就是:
當你執行
pyinstaller
選項 ..myscript.py
PyInstaller做的第一件事就是構建一個規範(規範)文件 myscript.spec
。該文件存儲在--specpath=
目錄中,默認為當前目錄。
spec文件告訴PyInstaller如何處理你的腳本。它對腳本名稱和您為pyinstaller
命令提供的大多數選項進行編碼。spec文件實際上是可執行的Python程式碼。 PyInstaller通過執行spec文件的內容來構建應用程式。
對於PyInstaller的許多用途,您不需要檢查或修改spec文件。通常足以將所有需要的資訊(例如隱藏的導入)作為pyinstaller
命令的選項並讓它運行。
如果你想要進行更加的複雜的添加數據文件,使用模組中的數據文件,都需要用spec文件,可以通過閱讀他的官方手冊
https://pyinstaller.readthedocs.io/en/stable/spec-files.html
關於PY2exe
關於py2exe,在python3.7的環境下可以下載,但是並不能使用,由於我的虛擬機問題很多,所以就沒有去驗證py2exe的使用方法。
py2exe的打包方法是要創建一個python程式進行打包的
例如
from distutils.core import setup import py2exe setup(windows=["snake.py"])

具體的內容可以去py2exe的官網閱讀
http://www.py2exe.org/index.cgi/FrontPage
版本太過老舊了,本來我打算用虛擬機下載一個舊版本的python去打包一下的,可是py2exe並不支援其他作業系統僅支援windows

