前言
将python程序 xxx.py打包成 xxx.exe,随时随地运行
步骤
一、安装pyinstaller
1、pip install pyinstaller
二、进入虚拟环境进行打包
由于项目一般在虚拟环境下进行开发,所以进入虚拟环境进行打包
1、进入虚拟环境
workon virenv
2、打包指令
pyinstaller -F translation.py -i translate.ico -p D:\projects\pyvirtualenv\translate\Lib\site-packages
参数备注:
translation.py:要打包的python脚本程序 translate.ico:需要使用的程序图标 D:\projects\pyvirtualenv\translate\Lib\site-packages:使用的运行环境
执行以上指令就,将在当前目录生成一个配置文件translation.spec,并在dist目录下生成一个translation.exe。
translation.spec文件很重要,可通过修改该文件,添加需要import的包和资源文件。如图片、有用的文件等资源。
修改此文件后,需要执行指令,将资源再次打包:
pyinstaller xxx.spec
3、xxx.spec
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['main.py'],
pathex=['D:\\projects\\pyvirtualenv\\translate\\Lib\\site-packages', 'D:\\projects\\MLTC\\mltc-pa'],
binaries=[],
datas=[('dicts','dicts'),('elasticsearch-7.9.1','elasticsearch-7.9.1')],
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='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True )
其中资源文件的打包主要修改datas参数,例如
datas=[('dicts','dicts'),('elasticsearch-7.9.1','elasticsearch-7.9.1')],
进行打包后,资源文件的访问方式会有一些不同,需要访问一个临时目录,可使用以下的函数,生成访问路径。可兼容原python程序的路径
def resource_path(relative_path):
if getattr(sys, 'frozen', False): #是否Bundle Resource
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
在使用时,在代码中修改:
dictDir2 = resource_path('/'.join(('dicts','aa','v.txt')))