python3 關於pyinstaller在windows下打包.exe文件

在windows下把所需要的python3 pyinstaller打包exe文件,首先大家肯定都已經安裝好了python環境,但是要提醒的一點就是 安裝的python環境,不要使用python3 自帶的虛擬環境。不要使用python3 自帶的虛擬環境!不要使用python3 自帶的虛擬環境!重要的事情說三邊 pyinstaller 官方文檔

1、通過pipy 安裝pyinstaller

pip install pyinstaller

注意:安裝Pyinstaller過程中是否自動安裝pywin32和pypiwin32,沒有安裝使用以下命令安裝 pywin32 pypiwin32

	pip install pywin32
	pip install pypiwin32

2、cd 到你的項目目錄並執行以下命令

pyinstaller yourprogram.py

就可以看到build和dist文件夾,.exe就在文件夾dist目錄下面
之後

pyinstaller yourprogram.spec

例如: 一個exe文件,去除命令行黑框,設置exe圖標 (圖標放在根目錄下)

pyinstaller --onefile --windowed  -i favicon-logo.ico myscript.py

注:
–noconsole 沒有命令框
–onefile 一個文件
–windowed 隱藏代碼

-F 選項可以打出一個exe文件,默認是 -D,意思是打成一個文件夾。
-w 選項可以打桌面程序,去掉命令行黑框
-i 可以設置圖標路徑,將圖標放在根目錄:

上面設置完之後只要使用.spec文件就行了,修改完之後執行以下命令就行了,不需要執行之前的命令,使用以下命令

pyinstaller yourprogram.spec

3、關於spec文件

這個是打成單一exe文件的spec文件

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['firstapp.py'],
             pathex=['G:\\python\\firstapp'],
             binaries=[],
             datas=[("recordtool\\bridge.dll",'recordtool'),("recordtool\\brihttpsvr.dll",'recordtool'),("recordtool\\qnviccub.dll",'recordtool')],
             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)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='幫家師傅錄音盒子',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False , icon='favicon-logo.ico')

binaries 二進制文件
datas 打包進去的資源文件
(‘res’,‘res’) 文件夾到根目錄的文件夾
(“recordtool\bridge.dll”,‘recordtool’) .dll文件到根目錄的recordtool文件目錄下面
icon 是圖片路徑
console 是否顯示命令框
debug 是否是調試模式

打包成文件夾的形式

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['firstapp.py'],
             pathex=['G:\\python\\firstapp'],
             binaries=[],
             datas=[("recordtool\\bridge.dll",'recordtool'),("recordtool\\brihttpsvr.dll",'recordtool'),("recordtool\\qnviccub.dll",'recordtool')],
             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)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='軟件名字',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=False , icon='favicon-logo.ico')
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='firstapp')

注:coll 是文件夾的選項,如果你的.py文件不是中文的話,name屬性儘量不改,不然圖標就不正常了。

coll 改了中文名字圖標不正常,

解決方案:以下兩種方案任選其一

  1. 先用英文文件夾打包,最後改成中文
  2. 需要把你初始化的xx.spec文件改成"中文名字.spec",.spec的coll->name 屬性改爲.spec的中文名字,就能正常顯示圖標了

遇到 ** ModuleNotFoundError: No module named ‘win32com’**

pip install pywin32 or pip install pypiwin32

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