多个python文件打包成可执行的exe文件

python项目(包含多个python文件)打包成exe文件
首先,我的文件结构是这样的:
多个python文件打包成可执行的exe文件_第1张图片
UTool是整个python项目文件,里面包含packs文件夹,rcat_images文件夹,主函数main.py
其中packs里面包含若干py文件,rcat里面是图片文件
多个python文件打包成可执行的exe文件_第2张图片
此文是用pyinstaller完成的。
首先安装pyinstaller,pip install pyinstaller

1.将所有文件放于主文件夹下(这里是UTool),主文件夹里面可包含多个文件和文件夹

2.打开cmd,切换到UTool路径下,输入:
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文件要能在当前路径下找到其他文件。

3.用配置好的spec文件制作exe:
pyinstaller -D main.spec
使用-D制作出来的exe比使用-F的快很多,因为-F把所有dll文件都打包到一个exe中了(-F这时候exe会很大,加载变慢,推荐-D)。

4.生成后的exe在dist的main中
多个python文件打包成可执行的exe文件_第3张图片
5.点击运行exe即可

你可能感兴趣的:(python)