前言:才入职新公司;进来工作内容,就是将之前的python脚本项目打包成.exe可执行文件;一来方便不同岗位的同事之间使用,二来源码信息不会改动和泄漏。
正因为python具有丰富的第三方库,目前已有数万之多;这里用到的是 'pyinstaller'库;
正文:
两种情况:Ⅰ、单独一个py文件打包成exe,Ⅱ、整个项目或者多个py打包成exe;
一、Python环境(不做介绍)
二、win+r 输入md,进入’命令提示符‘
在命令窗口安装pyinstaller包:pip install pyinstaller
三、安装好pyinstaller库后
Ⅰ、单独一个py文件打包成exe
我这里以打包buildsDemo项目为例,将main.py打包成.exe可执行文件
①:进入需要打包成exe的main.py文件夹下输入'cmd' 进入'命令提示符中';
②:输入:pyinstaller -F -i 013.ico main.py
-F:打包后只生成单个exe格式文件,启动较慢;
-D:默认选项,创建一个目录,包含exe文件以及大量依赖文件,启动较快;
-c:默认选项,使用控制台(就是类似cmd的黑框);
-w:不使用控制台;
-p:添加搜索路径,让其找到对应的库;(多数图片格式都行)
-i:改变生成程序的icon图标。
出现:Building EXE from EXE-00.toc completed successfully.
执行成功后,生成两个文件夹(build、dist)和一个.spec文件(main.spec)
dist文件夹下,就是已生成好的exe文件了
Ⅱ、整个项目或者多个py打包成exe;
注意:多个文件打包方法==》先打包一个py;在修改打包后生成的spec文件;
以上述Ⅰ中为例前提:
①:删除build、dist文件夹;只保留main.spec文件
②:编辑main.spec;将其它需要打包的py加入到 Analysis中:
===修改前:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
[main.py],
...省略相同代码...
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
...省略相同代码...
console=True,
...省略相同代码...
)
===修改后:
③:注意:如果项目有界面,不需要黑色窗口,需将main.spec文件中的console=true 改为console = False(默认为True)
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
py_files = [
'tools\\add_ip.py',
'tools\\get_data.py',
'log.py',
'main.py',
'utils.py',
]
a = Analysis(
py_files,
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
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=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon=['013.ico'],
)
④:修改完成后,执行命令:pyinstaller main.spec;执行成功后
再次生成build、dist文件夹。dist下的exe便是项目的exe文件了。
版权归原作者 Prom·otis 所有, 如有侵权,请联系我们删除。