Python如何將py文件打包成exe


安裝pyinstaller

打開cmd窗口,輸入pip install pyinstaller,命令行輸出successfully表示成功。

 

生成exe文件

一、單個py文件

在py文件目錄下,打開cmd窗口,輸入pyinstall -F XXX.py,執行成功的話,會在當前目錄生成一個dist文件夾,XXX.exe文件在此文件夾下。

如果是圖形窗口,不想要控制台出現的話,可以pyinstall -F XXX.py --noconsole

添加版本信息

安裝好pyinstaller后,我們會得到兩個輔助工具,pyi-grab_version和pyi-set_version。

1. 使用pyi-grab_version創建版本信息模板文件,首先找到一個有版本信息的XXX.exe工具,在此目錄下打開cmd窗口,輸入pyi-grab_version XXX.exe,執行成功后,會在此目錄下獲得一個file_version_info.txt文件,這個就是我們要的文件版本信息模板文件。

2. 有了模板文件后,我們需要修改里面的內容,換成我們自己想要的版本內容,最好用nopad++打開。

3. 在打包時加入版本信息。

方法一、還沒有打包成exe的py文件

pyinstaller -F --version--file file_version_info.txt XXX.py

方法二、已經打包好的exe

pyi-set_version file_version_info.txt XXX.exe

 

二、多個py文件

1、盡量將所有要執行的py文件放在一個大文件夾下(里面允許有多個文件夾)

2、命令行輸入pyi-makespec main.py 或者 pyi-makespec -F main.py(main.py為Python程序的入口py文件)。

  pyi-makespec main.py --> 打包之后會生成一個目錄

  pyi-makespec -F main.py --> 打包之后只會生成一個exe

  選擇一個命令即可。

3、現在文件夾下生成了一個main.spec文件和兩個文件夾

4、編輯main.spec文件,找到a = Analysis(),先修改第一個參數,這里面的列表都必須是py文件

a = Analysis(['pin.py'],
             pathex=['F:\\python_work\\pytest\\pin'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

 

如果用到了其他的py文件,就在第一個列表里面加入相應py文件的路徑,如果是同級目錄下,直接寫文件名,如果不在同一個文件下,寫完整路徑。

a = Analysis(['pin.py', 'cursor_control.py'],
             pathex=['F:\\python_work\\pytest\\pin'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

 

如果用到了非py文件需要打包,那么找到datas列表,將非py文件的路徑與文件夾名寫在元組里。

例如:

datas = [('C:\\project\\test\\images','images'),('C:\\project\\test\\EventLogs','EventLogs')]

 

datas:

  1. 第一個參數是Python中的非py類型文件的路徑
  2. 第二個參數是非py文件保存此資源的文件夾名稱,要和路徑中的文件夾名稱相同。

5、保存文件,在.spec文件路徑下打開命令行,輸入pyinstaller -D main.spec 或者 pyinstaller main.spec

  如果在第2條中選擇了pyi-makespec -F main.py ,那么此處只需要執行pyinstaller main.spec即可

6、生成的exe程序在dist文件夾中,dist文件夾里包含了整個項目所需環境,可在其他電腦中進行使用。

 

特別注意: 如果寫了關於pyqt5界面的程序的話,在其主函數里面導入PYQT5之前需要加上如下代碼

import os
if hasattr(sys, 'frozen'):
    os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']

from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
from PyQt5 import QtCore, QtGui, QtWidgets

 

參考鏈接:http://www.yunweishare.com/?p=726

ok.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM