赞
踩
python项目(包含多个python文件)打包成exe文件
首先,我的文件结构是这样的:
UTool是整个python项目文件,里面包含packs文件夹,rcat_images文件夹,主函数main.py
其中packs里面包含若干py文件,rcat里面是图片文件
此文是用pyinstaller完成的。
首先安装pyinstaller,pip install pyinstaller
1.将所有文件放于主文件夹下(这里是UTool),主文件夹里面可包含多个文件和文件夹
2.打开cmd,切换到UTool路径下,输入:
先在控制台中输入 chcp 65001(为了解决编码问题)
然后输入:pyi-makespec main.py
生成main.spec文件
制作spec文件
#-*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis(['main.py', 'D:\\Study\\pythonProject\\UTool\\packs\\__init__.py', 'D:\\Study\\pythonProject\\UTool\\packs\\auto_open.py', 'D:\\Study\\pythonProject\\UTool\\packs\\clike.py', 'D:\\Study\\pythonProject\\UTool\\packs\\code_reader.py', 'D:\\Study\\pythonProject\\UTool\\packs\\complexity_analyse.py', 'D:\\Study\\pythonProject\\UTool\\packs\\control.py', 'D:\\Study\\pythonProject\\UTool\\packs\\csharp.py', 'D:\\Study\\pythonProject\\UTool\\packs\\gdscript.py', 'D:\\Study\\pythonProject\\UTool\\packs\\go.py', 'D:\\Study\\pythonProject\\UTool\\packs\\java.py', 'D:\\Study\\pythonProject\\UTool\\packs\\javascript.py', 'D:\\Study\\pythonProject\\UTool\\packs\\js_style_language_states.py', 'D:\\Study\\pythonProject\\UTool\\packs\\js_style_regex_expression.py', 'D:\\Study\\pythonProject\\UTool\\packs\\lua.py', 'D:\\Study\\pythonProject\\UTool\\packs\\objc.py', 'D:\\Study\\pythonProject\\UTool\\packs\\php.py', 'D:\\Study\\pythonProject\\UTool\\packs\\print_error.py', 'D:\\Study\\pythonProject\\UTool\\packs\\python.py', 'D:\\Study\\pythonProject\\UTool\\packs\\Resource_Calculate.py', 'D:\\Study\\pythonProject\\UTool\\packs\\ruby.py', 'D:\\Study\\pythonProject\\UTool\\packs\\rubylike.py', 'D:\\Study\\pythonProject\\UTool\\packs\\scala.py', 'D:\\Study\\pythonProject\\UTool\\packs\\script_language.py', 'D:\\Study\\pythonProject\\UTool\\packs\\swift.py', 'D:\\Study\\pythonProject\\UTool\\packs\\ttcn.py'], pathex=['D:\\Study\\pythonProject\\UTool'], binaries=[], datas=[('D:\\Study\\pythonProject\\UTool\\rcat_images','rcat_images')], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=['matplotlib','numpy','pandas'], 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='main', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, console=True ) coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, upx_exclude=[], name='main')
(1)第一个列表中写所有的py文件,与main一个文件夹的可以直接写文件名,不一个文件夹的需要写完整的文件路径。
(2)datas是中的元素是tuple类型,tuple的第一个参数是python项目中data文件(非py文件)的路径,
第二个参数是data在exe中保存此资源的文件夹名,要和项目中的文件夹名相同
(3)excludes里面可以填写不用的包名,这样打包以后会小点,例如:matplotlib等
(4)因为main.py是入口文件,所以被调用的其他py文件的当前路径都是main.py文件的当前路径。所以在源代码中就一定要把main.py放到最外层的项目文件夹中。在main.py中饮用了其他py文件,main.py文件要能在当前路径下找到其他文件。
如果出现:“ImportError: No module named 'sklearn.utils.cython_blas”
缺少包,加入就行。在hiddenimports中加入这个包
hiddenimports=[‘cython’, ‘sklearn’, ‘sklearn.utils._cython_blas’ ],
3.用配置好的spec文件制作exe:
pyinstaller -D main.spec
使用-D制作出来的exe比使用-F的快很多,因为-F把所有dll文件都打包到一个exe中了(-F这时候exe会很大,加载变慢,推荐-D)。
4.生成后的exe在dist的main中
5.点击运行exe即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。