Python腳本導出爲exe程序

環境:Pycharm2019.1 + Win10 + Python3.7.3

一.pyinstaller簡介

Python是一個腳本語言,被解釋器解釋執行。它的發佈方式:html

  • .py文件:對於開源項目或者源碼沒那麼重要的,直接提供源碼,須要使用者自行安裝Python而且安裝依賴的各類庫。(Python官方的各類安裝包就是這樣作的)python

  • .pyc文件:有些公司或我的由於機密或者各類緣由,不肯意源碼被運行者看到,可使用pyc文件發佈,pyc文件是Python解釋器能夠識別的二進制碼,故發佈後也是跨平臺的,須要使用者安裝相應版本的Python和依賴庫。mysql

  • 可執行文件:對於非碼農用戶或者一些小白用戶,你讓他裝個Python同時還要折騰一堆依賴庫,那簡直是個災難。對於此類用戶,最簡單的方式就是提供一個可執行文件,只須要把用法告訴Ta便可。比較麻煩的是須要針對不一樣平臺須要打包不一樣的可執行文件(Windows,Linux,Mac,...)。git

本文主要就是介紹最後一種方式,.py和.pyc都比較簡單,Python自己就能夠搞定。將Python腳本打包成可執行文件有多種方式,本文重點介紹PyInstaller,github

 

PyInstaller的原理簡介

PyInstaller其實就是把python解析器和你本身的腳本打包成一個可執行的文件,和編譯成真正的機器碼徹底是兩回事,因此千萬不要期望成打包成一個可執行文件會提升運行效率,相反可能會下降運行效率,好處就是在運行者的機器上不用安裝python和你的腳本依賴的庫。在Linux操做系統下,它主要用的binutil工具包裏面的lddobjdump命令。sql

PyInstaller輸入你指定的的腳本,首先分析腳本所依賴的其餘腳本,而後去查找,複製,把全部相關的腳本收集起來,包括Python解析器,而後把這些文件放在一個目錄下,或者打包進一個可執行文件裏面。shell

能夠直接發佈輸出的整個文件夾裏面的文件,或者生成的可執行文件。你只須要告訴用戶,你的應用App是自我包含的,不須要安裝其餘包,或某個版本的Python,就能夠直接運行了。windows

須要注意的是,PyInstaller打包的執行文件,只能在和打包機器系統一樣的環境下。也就是說,不具有可移植性,若須要在不一樣系統上運行,就必須針對該平臺進行打包。app

 

pyinstaller將Python腳本打包成可執行程序,使在沒有Python環境的機器上運行python2.7

最新版是pyinstaller 3.1.1。支持python2.7和python3.3+。
可運行在Windows,Mac和Linux操做系統下。
但它不是跨編譯的,也就是說在Windows下用PyInstaller生成的exe只能運行在Windows下,在Linux下生成的只能運行在Linux下。

二.Pyinstaller在windows下的安裝

第一種方法是使用命令安裝Pyinstaller,命令pip install Pyinstaller,(大寫的P)
在Windows下,Pyinstaller須要PyWin32的支持。當用pip安裝Pyinstaller時未找到PyWin32,會自動安裝pypiwin32。

若是第一種方法安裝失敗,咱們就須要找到第二種方法將工具下載到本地進行安裝:

一、先下載 pyinstaller的安裝文件,下載地址:http://www.pyinstaller.org/downloads.html

二、我安裝的是3.4版本,直接下載:pyinstaller 3.4

三、下載到本地後,直接解壓,而後經過管理員模式打開命令窗口,用 cd 命令切換至 pyinstaller的解壓路徑,而後運行 python setup.py install

四、安裝的過程會花點時間,就耐心等待吧,出現下面的提示代表安裝成功

---------------------------------------------------------------------------------------------------------------------

Best match: setuptools 40.8.0

Adding setuptools  40.8 . 0  to easy - install.pth  file
Installing easy_install - script.py script to C:\Program Files\Python3\Scripts
Installing easy_install.exe script to C:\Program Files\Python3\Scripts
Installing easy_install - 3.6 - script.py script to C:\Program Files\Python3\Scripts
Installing easy_install - 3.6 .exe script to C:\Program Files\Python3\Scripts
Using c:\program files\python3\lib\site - packages
Finished processing dependencies  for  PyInstaller = = 3.4
---------------------------------------------------------------------------------------------------------------------
 
五、經過 pip show pyinstaller查看詳細信息進一步確認安裝狀況

---------------------------------------------------------------------------------------------------------------------

PS C:\Windows\system32> pip show pyinstaller

Name: pyinstaller
Version:  3.4
Summary: PyInstaller bundles a Python application  and  all  its dependencies into a single package.
Home - page: http: / / www.pyinstaller.org
Author: Giovanni Bajo, Hartmut Goebel, David Vierra, David Cortesi, Martin Zibricky
Author - email: pyinstaller@googlegroups.com
License: GPL license with a special exception which allows to use PyInstaller to build  and  distribute non - free programs (including commercial ones)
Location: c:\program files\python3\lib\site - packages\pyinstaller - 3.4 - py3. 6.egg
Requires: setuptools, pefile, macholib, altgraph, pywin32 - ctypes
Required - by:
---------------------------------------------------------------------------------------------------------------------
六、用命令「pip install pywin32」安裝Pywin32,或者下載一個pywin32來安裝,注意文件對應的Python版本。 https://pypi.org/project/pywin32/#files
安裝命令 「pip install ./downloads/pywin32-224-cp37-cp37m-win_amd64.whl」 或參考:https://packaging.python.org/tutorials/installing-packages/
 
3、打包exe步驟:

三.開始打包PY文件爲EXE文件

cmd(或Power shell)進入py程序項目目錄,執行命令:pyinstaller -F -w --icon=xxx.ico main.py --noconsole。其中,-F表示生成單exe可執行文件,-w表示窗體程序,
--icon是設置exe的顯示圖標,'main.py'是程序的入口,--noconsole 表示不展現cmd窗口,反過來想看cmd窗口就改爲--console。

編譯:pyinstaller -F -w game.py  (-F表示打包單個文件,-w是爲了打開exe時候不彈出黑框)

設置exe的圖標:pyinstaller -F -w -i bitbug_favicon.ico game.py  (-i用來設置編譯成exe文件的圖標,後面跟.ico格式的圖片文件)

 

一陣刷屏以後,終於打出成功的提示:

程序目錄下多了幾個文件夾:一個spec文件,build文件夾,一個dist文件夾,其中的dist文件夾內就是咱們生成的exe應用程序:

打開目錄dist咱們會看到咱們想要的EXE程序文件,雙擊運行它。是否是咱們的程序呢?

 

至此咱們的 「Python腳本導出爲exe程序」 成功結束

4、Pyinstaller打包多個.py文件

1、多文件打包爲單一文件時,即pyinstaller 命令中加入了-F,也可能會致使錯誤。儘可能不要使用-F。

2、儘可能把打包後的文件放在英文目錄下。

多個.py文件打包命令格式以下:


pyinstaller [主文件] -p [其餘文件1] -p [其餘文件2] --hidden-import [自建模塊1] --hidden-import [自建模塊2]
3、使用pyinstaller打包的時候,僅打包.py文件,其他依賴項只需在打包完成後,拷入打包生成的根目錄便可。

4、舉例說明:

個人文件構成

其中VIPCracker.py是主程序入口文件,其餘.py文件是自建模塊,須要在主文件中使用,zh_CN.qm和JygoxigmJ.db文件是程序中須要用到的額外文件(將它們放在打包後生成的.exe文件的同一個目錄下便可)

以上文圖中結構爲例,在根目錄打開命令窗口並進入根目錄下,輸入命令:


pyinstaller -F -i crack.ico -w VIPCracker.py -p CholenSql.py -p ImgICon.py -p VIPGUI.py
--hidden-import CholenSql --hidden-import ImgICon --hidden-import VIPGUI
拓展知識:pyinstaller 中的-i crack.ico 能夠設置生成.exe文件的圖標。

多文件打包:

命令格式以下,下命令爲一條命令,爲方便顯示作了分行處理:

pyinstaller [主文件] -p [其餘文件1] -p [其餘文件2] 
--hidden-import [自建模塊1] 
--hidden-import [自建模塊2]
# 以上爲一整條命令
pyinstaller main.py -p mysql.py -p other.py --hidden-import mysql --hidden-import other

在目錄結構:「程序根目錄\dist\main\」 下能夠找到生成的main.exe。將其餘依賴文件拷貝進入「程序根目錄\dist\main\」 下,便可運行


項目XXX舉例,main和ico文件要放一塊兒 -p 文件夾,由於項目下我建立了case、autodriver、data、page文件夾,文件夾裏面放的*.py文件經過--hiddent-import指向,代碼以下:
pyinstaller -F -i t.ico -w main.py -p case -p autodriver -p data -p page -p page --hidden-import workday.py --hidden-import auto_driver.py --hidden-import login.csv --hidden-import base_page.py --hiddent-import sub_page.py
注意:--hiddent-import是連在一塊兒的,dist文件夾裏面要把須要的問卷copy進來,而後整個dist文件夾就能夠任意移動到其餘位置,到時候運行*.exe文件就能夠執行程序了

 

參考文獻:

一、如何把Python腳本導出爲exe程序:                                       https://www.cnblogs.com/robinunix/p/8426832.html

二、Python編譯成exe:                                                                https://blog.csdn.net/hxy199421/article/details/86609219

三、Python學習筆記(15)-Python代碼轉換爲exe可執行程序詳解:https://blog.csdn.net/woshisangsang/article/details/73230433

四、python文件封裝成*.exe文件(單文件和多文件):       https://www.cnblogs.com/jackzz/p/9431923.html

五、Pyinstaller打包多個.py文件:                                                  https://blog.csdn.net/CholenMine/article/details/80964272

相關文章
相關標籤/搜索