『Python』Python編譯成計算機可執行文件(Windows計算機可執行文件exe,Linux 計算機可執行文件elf,Mac計算機可執行文件mach-O)

背景:

Python 程序都是腳本的方式,一般是在解析器裏運行,如果要想要給別的計算機使用,需要提前安裝Python解析器和相關包纔可以運行,爲了在 Windows(或其它系統裏) 裏方便發佈,我們將.py文件,編譯成一個可執行文件,並且打包所需要庫文件,只需要點擊一個可執行文件運行,而無需安裝Python和相關庫文件。這樣發佈給用戶使用何不美哉。

我們的主角 :PyInstaller

PyInstaller 是一個十分有用的第三方庫,可以用來打包 python 應用程序,打包完的程序就可以在沒有安裝 Python 解釋器的機器上運行了。

PyInstaller將 Python應用程序凍結(打包)在Windows,GNU / Linux,Mac OS X,FreeBSD,Solaris和AIX下的獨立可執行文件中。
與類似工具相比,PyInstaller的主要優勢在於PyInstaller可與Python 2.7和3.5-3.7一起使用;由於透明壓縮,它可生成較小的可執行文件;它是完全多平臺的;並且使用OS支持來加載動態庫,從而確保完全兼容。

PyInstaller的主要目標是開箱即用地與第三方軟件包兼容。這意味着,使用PyInstaller,使外部軟件包正常工作所需的所有技巧已 集成在PyInstaller本身中,因此無需用戶干預。您將不需要在Wiki中尋找技巧,也可以對文件或設置腳本進行自定義修改。例如,完全支持PyQt,Django或matplotlib之類的庫,而無需手動處理插件或外部數據文件。

使用

1.安裝pyinstaller
pip install pyinstaller
2.進入安裝工作環境
  1. Win+R運行打開CMD
    在這裏插入圖片描述
    在這裏插入圖片描述

  2. 進入工作目錄,即所編譯.py文件的路徑
    右鍵點擊Python文件,屬性中即可獲得路徑。
    在這裏插入圖片描述
    利用cd命令進入工作目錄:

    cd C:\Users\張小胖\Desktop
    

    在這裏插入圖片描述

3. 生成不自定義圖標的exe文件
pyinstaller -F -w game.py  (-F表示打包單個文件,-w是爲了打開exe時候不彈出黑框)
4.生成帶自定義圖標的exe文件

在這裏插入圖片描述

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

PyInstaller 支持的常用選項

-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 會對腳本進行解析,並做出如下動作:

  1. 在工作目錄生成 helloworld.spec 文件;

  2. 創建一個 build 文件夾;

  3. 寫入一些日誌文件和中間流程文件到 build 文件夾;

  4. 創建 dist 文件夾;

  5. 生成可執行文件到 dist 文件夾;

  6. 如果編譯中出現錯誤,會生成debug.log的日誌文件;

內部流程
C:\Users\張小胖\Desktop>pyinstaller -F -w demo.py
46 INFO: PyInstaller: 3.6
47 INFO: Python: 3.8.2
47 INFO: Platform: Windows-10-10.0.18362-SP0
49 INFO: wrote C:\Users\張小胖\Desktop\demo.spec
50 INFO: UPX is not available.
51 INFO: Extending PYTHONPATH with paths
['C:\\Users\\張小胖\\Desktop', 'C:\\Users\\張小胖\\Desktop']
51 INFO: checking Analysis
52 INFO: Building Analysis because Analysis-00.toc is non existent
52 INFO: Initializing module dependency graph...
54 INFO: Caching module graph hooks...
78 INFO: Analyzing base_library.zip ...
2072 INFO: Processing pre-find module path hook   distutils
2073 INFO: distutils: retargeting to non-venv dir 'c:\\users\\張小胖\\appdata\\local\\programs\\python\\python38\\lib'
4270 INFO: Caching module dependency graph...
4365 INFO: running Analysis Analysis-00.toc
4367 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable
  required by c:\users\張小胖\appdata\local\programs\python\python38\python.exe
4630 INFO: Analyzing C:\Users\張小胖\Desktop\demo.py
4757 INFO: Processing pre-safe import module hook   urllib3.packages.six.moves
c:\users\張小胖\appdata\local\programs\python\python38\lib\site-packages\selenium\webdriver\firefox\firefox_profile.py:208: SyntaxWarning: "is" with a literal. Did you mean "=="?
  if setting is None or setting is '':
6324 INFO: Processing module hooks...
6324 INFO: Loading module hook "hook-certifi.py"...
6327 INFO: Loading module hook "hook-distutils.py"...
6330 INFO: Loading module hook "hook-encodings.py"...
6390 INFO: Loading module hook "hook-lib2to3.py"...
6396 INFO: Loading module hook "hook-pydoc.py"...
6397 INFO: Loading module hook "hook-selenium.py"...
6408 INFO: Loading module hook "hook-sysconfig.py"...
6409 INFO: Loading module hook "hook-xml.dom.domreg.py"...
6410 INFO: Loading module hook "hook-xml.etree.cElementTree.py"...
6416 INFO: Loading module hook "hook-xml.py"...
6418 INFO: Loading module hook "hook-_tkinter.py"...
6555 INFO: checking Tree
6555 INFO: Building Tree because Tree-00.toc is non existent
6556 INFO: Building Tree Tree-00.toc
6668 INFO: checking Tree
6668 INFO: Building Tree because Tree-01.toc is non existent
6669 INFO: Building Tree Tree-01.toc
6723 INFO: Looking for ctypes DLLs
6755 INFO: Analyzing run-time hooks ...
6759 INFO: Including run-time hook 'pyi_rth__tkinter.py'
6762 INFO: Including run-time hook 'pyi_rth_multiprocessing.py'
6765 INFO: Including run-time hook 'pyi_rth_certifi.py'
6775 INFO: Looking for dynamic libraries
6862 WARNING: lib not found: pywintypes38.dll dependency of c:\users\張小胖\appdata\local\programs\python\python38\lib\site-packages\win32\win32evtlog.pyd
6870 WARNING: lib not found: pywintypes38.dll dependency of c:\users\張小胖\appdata\local\programs\python\python38\lib\site-packages\win32\win32api.pyd
6925 WARNING: lib not found: pywintypes38.dll dependency of c:\users\張小胖\appdata\local\programs\python\python38\lib\site-packages\win32\win32wnet.pyd
7017 INFO: Looking for eggs
7018 INFO: Using Python library c:\users\張小胖\appdata\local\programs\python\python38\python38.dll
7019 INFO: Found binding redirects:
[]
7025 INFO: Warnings written to C:\Users\張小胖\Desktop\build\demo\warn-demo.txt
7089 INFO: Graph cross-reference written to C:\Users\張小胖\Desktop\build\demo\xref-demo.html
7130 INFO: checking PYZ
7130 INFO: Building PYZ because PYZ-00.toc is non existent
7134 INFO: Building PYZ (ZlibArchive) C:\Users\張小胖\Desktop\build\demo\PYZ-00.pyz
7971 INFO: Building PYZ (ZlibArchive) C:\Users\張小胖\Desktop\build\demo\PYZ-00.pyz completed successfully.
7989 INFO: checking PKG
7989 INFO: Building PKG because PKG-00.toc is non existent
7989 INFO: Building PKG (CArchive) PKG-00.pkg
10434 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully.
10460 INFO: Bootloader c:\users\張小胖\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\bootloader\Windows-64bit\runw.exe
10460 INFO: checking EXE
10460 INFO: Building EXE because EXE-00.toc is non existent
10461 INFO: Building EXE from EXE-00.toc
10463 INFO: Appending archive to EXE C:\Users\張小胖\Desktop\dist\demo.exe
10474 INFO: Building EXE from EXE-00.toc completed successfully. 

寫在最後:
Name:風骨散人,目前是一名雙非在校大學生,預計考研,熱愛編程,熱愛技術,喜歡分享,知識無界,希望我的分享可以幫到你!名字的含義:我想有一天我能有能力隨心所欲不逾矩,不總是向生活低頭,有能力讓家人擁有富足的生活而不是爲了生計而到處奔波。“世人慌慌張張,不過是圖碎銀幾兩。偏偏這碎銀幾兩,能解世間惆悵,可讓父母安康,可護幼子成長 …”
文章主要內容:
Python,C++,C語言,JAVA,C#等語言的教程
ACM題解、模板、算法等,主要是數據結構,數學和圖論
設計模式,數據庫,計算機網絡,操作系統,計算機組成原理
Python爬蟲、深度學習、機器學習
計算機系408考研的所有專業課內容
目前還在更新中,先關注不迷路。微信公衆號,cnblogs(博客園),CSDN同名“風骨散人”

如果有什麼想看的,可以私信我,如果在能力範圍內,我會發布相應的博文!
感謝大家的閱讀!😘你的點贊、收藏、關注是對我最大的鼓勵!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章