您当前的位置:首页 > 计算机 > 软件应用 > 开发(IDE)

【PYTHON】将Python项目打包成EXE可执行文件(单文件,多文件,包含图片)

时间:02-28来源:作者:点击数:

解决 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片)

1.当我们写了一个Python的项目时,特别是一个GUI项目,我们特备希望它能成为一个在Windows系统可执行的EXE文件,那么今天就来讲一下我是如何将我的GUI项目打包成一个EXE文件的你吧,其中有一些坑和遇到了一些错误,希望能给大家带来一定的帮助。

2.我们使用的是Python的一个第三方包进行打包的,这里使用的是pyinstaller包,我们可以直接使用pip install pyinstaller进行安装,因为使用pip进行安装时我们可以不用去管这些包的依赖关系,pip会自动帮我们完成这个包依赖。

至于具体的pyinstaller安装过程,这里不做介绍,但是附上安装连接

3.安装完pyinstaller之后,我们就可以使用它进行打包了。

4.准备EXE的图标。

5.这里首先介绍一下我的项目吧,

这是我的项目中的所有文件以及文件的目录排布。login.py是我的程序的入口,但是我的程序会有图片,比如login.py登录界面中会有一个装饰作用的图片,如下图中红色选中的部分所示:

但是我们可能会看到百度搜到的一些博客上的教程中,都是一些非常简单的demo,就是将一个单文件打包成一个EXE文件,而不是将一堆文件打包成一个EXE文件。这里就介绍一下如何将一堆文件打包成EXE文件。

从上图中,我们可以看到最后打包成功了,打包成功之后会在当前目录下生成两个文件夹,我们的EXE文件就在dist文件夹中。

6.语句介绍

1 >pyinstaller -F -w -i g:\2345Downloads\logo.ico login.py 
--hidden-import doTest.py --hidden-import itemContent --hidden-import queryDB.py 
--hidden-import view.py --hidden-import Applications.py --hidden-import mainWindow.py

解释:进入到cmd命令行中,然后cd到我们的项目代码所在的具体的目录,在项目代码所在的目录中,使用上述代码进行打包。

其中,-F 这里的F是大写的 意思是打包成一个EXE文件的意思

-w 这里的w是小写的,意思是取消控制台显示

-i 这里的i也是小写的,意思是忽略打包过程中遇到的错误,就是遇到错误也继续执行

从我的项目文件目录安排上可以看出,我这里没有在项目里放置更多的文件夹,一些代码文件都是散放在主文件夹中,在pyinstaller -F -w -i之后放的是我们需要最终显示的图标的绝对路径,之后的第一个Python文件就是这个项目的主文件,之后使用--hidden-import导入这个项目中的一些其他的Python文件。

如果我们是把一些具体功能的Python文件放在了一个具体的文件夹里,那么我们就可以使用-p 文件夹名,例如:

我们假设我们创建了一个sql文件夹,用来放一些处理数据库的Python文件,这里假设有mysql.py

pyinstaller -F -w -i g:\2345Downloads\logo.ico login.py -p sql --hidden-import mysql.py

7.项目中含有图片,

如果项目中含有图片,我们需要将代码中对图片的引用变成绝对路径,而不是相对路径,

如果不适用绝对路径,在执行打包的过程不会报错,也能正常生成EXE文件,但是当我们在执行它时,会提示一个错误:fail to execute script login(这里是你的程序入口的文件的文件名),如果想要看到点击EXE文件之后报的错误,我们可以将目录中的login.spec文件中的console=True,默认是False,所以如果设置为True之后,就会将错误信息显示在命令行窗口中。

报错类似如下:

login.spec的文件内容如下所示:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['login.py'],
             pathex=['G:\\software\\pycharm\\files\\NineChar'],
             binaries=[],
             datas=[],
             hiddenimports=['doTest.py', 'itemContent', 'queryDB.py', 'view.py', 'Applications.py', 'mainWindow.py'],
             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='login',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=False , icon='g:\\2345Downloads\\logo.ico')

当我们设置完那些参数之后,我们就可以直接对login.spec文件进行打包了,命令如下:pyinstaller -F -w -i g:\2345Downloads\logo.ico login.spec

最后生成的EXE文件会替换掉之前生成的EXE文件。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门