最近项目上一直都是用Spyder直接运行.py文件的方式来执行每日的自动化程序,每天都要手动去点击Run来执行一次,所以考虑把.py文件直接打包成exe,然后用windows的task schedule功能来让它自动每天运行。
用pyinstaller来打包exe文件,同时为了便于维护,给exe文件添加文件版本file version信息。

1. 安装pyinstaller

机器上的python环境是直接安装的Anaconda软件,所以直接打开“Anaconda Prompt”来安装pyinstaller,运行命令:pip install pyinstaller。(如果提示有其他相关的组件xxxx缺失,用相应的方式来安装就好: pip install xxxx)

2. 设置文件版本信息

为了方便版本管控,最好是给每次打包发布的exe文件设置文件版本信息——右键点击exe查看属性中的详情信息中可以看到版本信息。
方法一:
进入pyinstaller的此目录\PyInstaller\utils\cliutils\下(如果不知道路径可以通过去全盘查询cliutils来找到相应的文件夹,此处安利一款window上的文件查询小软件——Everything:https://www.voidtools.com/zh-cn/downloads/,查询速度超级快!)
你会看到如下几个文件:
其中的grab_version是用来捕获一个exe文件的版本信息并自动在同一目录下输出一个file_version_info.txt文件版本信息的,其中set_version是用来给一个exe文件赋值版本信息的,用法分别如下:
1. 进入cmd界面
2. 将目录转移到C:\ProgramData\Anaconda3\Lib\site-packages\PyInstaller\utils\cliutils\下
3. 拷贝一个要获取版本信息的exe文件到这个目录下
4. 在cmd窗口键入:python grab_version.py filename.exe
5. 目录下会自动出现一个标准的file_version_info.txt文件,双击打开,按照相应的需求修改
6. 在cmd窗口键入:python set_version.py file_version_info.txt youfilename.exe即可
方法二:
在打包的时候就已经准备好了版本信息文件:file_version_info.txt
打包时用此参数--version-file 即可:pyinstaller --version-file file_version_info.txt test.py
最后打包成exe,可以右键点击exe文件查看详细信息,可以看到有文件版本信息。

3. 运行pyinstaller来打包exe

一般用pyinstaller打包exe会用到-F参数(表示打包成一个EXE文件)或者--version-file(给exe文件赋予版本信息),其他参数如需了解,可以输入pyinstaller -h来获取帮助信息。
比如需要打包test.py文件为exe,用如下方式:

4. 打包exe过程中遇到的问题:

一般来说,如果是机器上组件缺失导致打包失败,安装相应的组件即可。
我也遇到了2个比较特殊的问题:
问题1: 打包提示报错:Cannot find existing PyQt5 plugin directories
解决方法:创建PyQt5 plugin的路径,按报错的路径来新建,然后将本来pyqt文件加中的pyqt5qmlplugin.dll文件拷贝放入此路径即可。
  1. 先查询机器是上否有安装pyqt以及文件夹,可以用Anaconda Prompt中输入conda list来查看机器上的pyqt的版本以及路径信息(同理,也可以用Everything来查询此dll文件来定位到文件夹路径)。
2. 新建报错中提到的路径,同时把dll文件拷贝进去。
再次打包运行就不会再报此错误了。
问题2:打包提示报错:RecursionError: maximum recursion depth exceeded
解决方法:因为python在处理循环的时候是手限制的,所以解除此限制即可
在打包文件夹中找到新生成的spec文件(比如test.spec),然后在该文件最上面添加如下2行来重定义循环次数即可;再运行此spec文件来打包即可:
import sys sys.setrecursionlimit(5000)
 

Python: pyinstaller打包exe(含file version信息)的更多相关文章

  1. python pyinstaller 打包exe报错

    今天用python 使用pyinstaller打包exe出现错误 环境pyqt5 + python3.6 在导入pyqt5包之前加上如下代码 import sysimport osif hasattr ...

  2. python pyinstaller打包exe暗坑1

    环境 python2.7.9 win-xp 今天打包了一个小脚本,结果打开报错

  3. pyinstaller 打包exe程序读不到配置文件No such file

    挺久没更新博客的,一来之前是觉得才疏学浅,记录下来的太简单没人看.二来时间上不是很充裕(不是借口,有时间打游戏,没时间总结) 偶然有一次发现同事在搜索解决问题的时候正在看我博客的解决思路,很奇妙的感觉 ...

  4. 利用PyInstaller打包exe文件

    前言 平常我们通过Python写完一些小脚本之后,如果使用不频繁的话,一般会选择在DOS界面直接跑脚本,或者在IDE中运行.但当我们需要频繁使用某些脚本,或者在没有Python环境的机器上也能顺利运行 ...

  5. Pyinstaller 打包exe 报错 "failed to execute script XXX"的一种解决方案

    最近用PyQt5写了一个界面小程序,需要打包成exe给到其他windows上使用,一开始使用python 3.7 64位,用pyinstaller打包exe,在64位机上运行正常. 但是目标电脑是32 ...

  6. Pyinstaller打包exe,丢失图标等问题

    Pyinstaller打包exe,丢失图标等问题 一.原因 exe运行时会解压一个名为'_MEI*'的资源文件夹到电脑的临时目录,程序结束时删除. 程序里使用'\图标.png'这样的路径,exe运行时 ...

  7. pyinstaller打包exe文件,运行时一闪而过

    pyinstaller打包exe文件出现命令窗口一闪而过 原因:exe运行过程中出错了,解决这些错误就可以了 解决方法: 通过 cd path >> xxx.exe 在命令行中运行exe文 ...

  8. pyinstaller打包exe文件闪退的解决办法

    pyinstaller是python下目前能打包py文件为windows下的exe文件的一个非常友好易用的库!但是,小爬每次用pyinstaller打包时也总是遇到一些难题,有时网上搜了一圈,也没看到 ...

  9. Pyinstaller 打包exe

    安装 ​ pip insatll Pyinstaller 参数 pyinstaller -Fw main.py 参数 概述 -F,-onefile 打包一个单个文件,如果你的代码都写在一个.py文件的 ...

随机推荐

  1. 3-QT程序运行时报错E:\SogouInput\6.7.0.0329\程序异常终止,该怎么解决?

    https://bbs.csdn.net/topics/390653779 出现这个错误的原因,使用声明的对象时,没有使用new对对象进行实例化. 包括:数组.

  2. Maven + spring + Mybatis + SpringMVC

    tomcat版本:apache-tomcat-7.0.70 一.新建一个maven的web项目 1.1.请勾选“Create a simple project”,创建一个简单的项目,这里不使用模板.也 ...

  3. Package gtk+-3.0 was not found in the pkg-config search path

    问题描述: 在fedora21系统上通过rpmbuild构建fcitx的二进制包时出现以上错误,经老程序员指点:“是相应的开发包没有安装” 解决办法: yum installl gtk3-devel  ...

  4. usaco oct09 Watering Hole

    Farmer John希望把水源引入他的N (1 <= N <= 300) 个牧场,牧场的编号是1~N.他将水源引入某个牧场的方法有两个,一个是在牧场中打一口井,另一个是将这个牧场与另一个 ...

  5. 关于某一discuz 6.0论坛故障的记录

    某日,额突然发现公司的discuz 6.0论坛在IE6浏览器下面显示出现问题: 每个链接都出现了下划线,很难看,不过已访问的链接(a:visted)却没有下划线,于是怀疑css.htm有问题.于是对c ...

  6. iOS沙盒机制介绍

    一.沙盒机制 沙盒的概念:沙盒是每一个iOS应用程序都会自动创建的一个文件系统目录(文件夹),而且沙盒还具有独立.封闭.安全的特点. 沙盒机制 iOS中的沙盒不仅仅是一个文件目录,TA其实更是一种安全 ...

  7. 2018.07.10NOIP模拟 Knapsack(单调队列优化dp)

    Knapsack 题目背景 SOURCE:NOIP2016-RZZ-4 T2 题目描述 有 n 个物品,第 i 个物品的重量为 ai . 设 f(i,j,k,l,m) 为满足以下约束的物品集合数量: ...

  8. 基于beego orm 针对oracle定制

    目前golang的ORM对oracle支持都没有mysql那样完整,一个orm要同时兼容mysql和oracle由于在sql语法上区别,会使整orm变的非常臃肿. 本项目是在beego orm上修改, ...

  9. 【转】web应用缓慢故障分析

    在这以后里分享一篇关于web应用缓慢的分析过程,感觉挺有用的. 原文出处:http://xjsunjie.blog.51cto.com/999372/751585 友在一家购物网站做运维不久,今日打电 ...

  10. 文件权限命令 linux

    chmod 777 文件名/文件夹名         拥有所有权限 http://www_xpc8_com/ chmod 755 文件名/文件夹名         属主有所有权限,群组和其他有读.执行 ...