在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 改了中文名字圖標不正常,
解決方案:以下兩種方案任選其一
- 先用英文文件夾打包,最後改成中文
- 需要把你初始化的xx.spec文件改成"中文名字.spec",.spec的coll->name 屬性改爲.spec的中文名字,就能正常顯示圖標了
遇到 ** ModuleNotFoundError: No module named ‘win32com’**
pip install pywin32 or pip install pypiwin32