解决 将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的文件内容如下所示:

  1. # -*- mode: python -*-
  2.  
  3. block_cipher = None
  4.  
  5. a = Analysis(['login.py'],
  6. pathex=['G:\\software\\pycharm\\files\\NineChar'],
  7. binaries=[],
  8. datas=[],
  9. hiddenimports=['doTest.py', 'itemContent', 'queryDB.py', 'view.py', 'Applications.py', 'mainWindow.py'],
  10. hookspath=[],
  11. runtime_hooks=[],
  12. excludes=[],
  13. win_no_prefer_redirects=False,
  14. win_private_assemblies=False,
  15. cipher=block_cipher,
  16. noarchive=False)
  17. pyz = PYZ(a.pure, a.zipped_data,
  18. cipher=block_cipher)
  19. exe = EXE(pyz,
  20. a.scripts,
  21. a.binaries,
  22. a.zipfiles,
  23. a.datas,
  24. [],
  25. name='login',
  26. debug=False,
  27. bootloader_ignore_signals=False,
  28. strip=False,
  29. upx=True,
  30. runtime_tmpdir=None,
  31. console=False , icon='g:\\2345Downloads\\logo.ico')

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

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

将Python项目打包成EXE可执行文件(单文件,多文件,包含图片)的更多相关文章

  1. 把Python项目打包成exe文件

    我们很多时候,写好的程序需要打包成.exe文件才可以发给客户,那么今天我就来谈一谈,如何将一个写好的Python程序打包成exe文件! 首先,我们我们使用到的工具是python 3.7 和 Pyins ...

  2. Python 程序打包成 exe 可执行文件

    Python 程序打包工具 Python 是一个脚本语言,被解释器解释执行.它的发布方式: .py 文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装 Python 并且安装依赖 ...

  3. pyinstaller使用-python项目转换成exe可执行文件

    http://blog.csdn.net/pipisorry/article/details/50620122 Python不是每个人的计算机里面都有安装,当您写了一个好用的工具,需要一个standa ...

  4. 用pyinstaller把python代码打包成exe可执行文件

    优点: 1. pyinstaller 是跨平台的可以用在linux和windows系统上 2. 操作非常简单,几个命令就搞定了,这个比py2exe容易用多了 缺点: 1. 打包后的体积过大,因为要带p ...

  5. Python项目打包成exe文件

    这里我们使用pyinstaller这个软件即可,使用pip即可完美安装,在要打包的程序目录下打开cmd输入 pyinstaller -F 文件名.py 即可成功,运行成功后生成一个dict文件夹,东西 ...

  6. python脚本打包成exe可执行文件

    1. 工具pyinstaller (pip install pyinstaller) 2.生成exe (pyinstaller -F -w Capturing_PDFs.py) 参数 -F 生成单个文 ...

  7. Pyton项目打包成exe文件

    Python项目打包成exe文件 1 系统环境 windows版本: Win7 64位 python环境:Anaconda python版本:3.6 64位 pyinstaller版本:3.5 1 安 ...

  8. Python打包成exe可执行文件

    Python打包成exe可执行文件 安装pyinstaller pyinstaller打包机制 Pyinstaller打包exe 总结命令 可能会碰到的一些常见问题 我们开发的脚本一般都会用到一些第三 ...

  9. PyQt(Python+Qt)学习随笔:windows下使用pyinstaller将PyQt文件打包成exe可执行文件

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在<windows下使用pyinstaller将多个目录的Pyt ...

随机推荐

  1. vi三种模式的切换

    基础上vi/vim共分为三种模式,分别是命令模式,输入模式和底线命令模式. 一.命令模式 用户刚刚启动vi/vim,便进入了命令模式. 在此状态下敲击键盘动作会被vim识别为命令,而非输入字符.比如我 ...

  2. yii2自定义json格式success,error跳转

    /** * ---------------------------------------------- * 操作成功跳转的快捷方法 * @access protected * @param stri ...

  3. 避免使用eval()

    eval()可以将任意的字符串当做一个JavaScript代码来执行. eval()使用实例: // 烦模式 var property = 'name'; console.log(eval('obj. ...

  4. 论文翻译技巧--Notepad替换回车

  5. PHP实现视频文件上传完整实例

    这篇文章主要介绍了PHP实现视频文件上传的技巧,包含了PHP配置信息的设计及大文件的处理,需要的朋友可以参考下    本文以一个完整实例的形式实现了视频文件上传的功能.虽然是比较基础的应用,仍有一定的 ...

  6. Alpha阶段敏捷冲刺(八)

    1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 祁泽文:写了关于统计的按钮的代码. 徐璐琳:完善了&q ...

  7. 使用Servlet动态生成验证码

    最近在重新看了一遍servlert,看到篇优质博客推荐给大家:https://www.cnblogs.com/xdp-gacl/p/3798190.html 顺便把学习过程中的知识记录下来. 今天是如 ...

  8. poj 1753 2965

    这两道题类似,前者翻转上下左右相邻的棋子,使得棋子同为黑或者同为白.后者翻转同行同列的所有开关,使得开关全被打开. poj 1753 题意:有一4x4棋盘,上面有16枚双面棋子(一面为黑,一面为白), ...

  9. python_条件语句

    条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. Python程序语言指定任何非0和非空(null)值为true,0 或者 null为fals ...

  10. 用jquery监听输入数字的变化

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...