换了份工作,换了种心情,有业务需要,搞了个自动化报表的小工具,使用的是python自动生产.exe的包pyinstaller,来到这边新同事很nice,直接上名字,带我一起熟悉业务,一起做事情的刘圣义,谢谢他!
主要解决问题,是从几个表里面把数据进行整合计算,最终输出一张excel表格,python脚本开发没啥问题,按照正常开发就行,要有main函数,然后如果有需要输入的文件则用
Dir_Path = os.getcwd()
获取当前目录,同时把输入文件放在与将来生成的.exe一起即可。
我装了两个conda环境,一个py27,一个py37,我是在py27环境上开发的脚本,所以激活py27,安装 pyinstaller,即:pip install pyinstaller ,我看了网上都是在cmd里面运行的,所以我把py27的python.exe改成python27.exe,设置系统环境变量,让系统知道python27环境,结果搞笑的是,我用pyinstaller -F -c xxx.py 生成.exe的时候一直报错:failed to find python.exe,后面我想肯定是我把python.exe改成了python27.exe,所以找不到了,后面我看到网上有人直接在conda命令行里面运行即可,顿时觉得自己好傻,所以将python27.exe改回来,然后在conda里面:
conda env list
activate py27
cd 到脚本所在的文件目录下
pyinstaller -F -c xxx.py
则生成了两个文件夹build和dist以及work_hour_tj.spec,打开dist即可看到.exe文件
使用该.exe文件时,直接把需要传入的文件跟它放在同一个目录下,点击.exe文件即可,注意日志闪过,所以如果有问题的话,记得要截屏。
遇到的问题是:
1.脚本有问题,也会生成.exe,但是就是双击弹窗无法执行,记得在本地跑通了再生成.exe
2.打印的一些信息,中文乱码,print("中文".decode('UTF-8').encode('GBK'))这样就解决了!
3. 最好不要把自己的脚本叫main.py容易出问题,网上看到的,我没有遇到
4. pyinstaller -F -c 即可,其他可见如下:
-F, –onefile 产生一个文件用于部署 (参见XXXXX).
-D, –onedir 产生一个目录用于部署 (默认)
-K, –tk 在部署时包含 TCL/TK
-a, –ascii 不包含编码.在支持Unicode的python版本上默认包含所有的编码.
-d, –debug 产生debug版本的可执行文件
-w,–windowed,–noconsole 使用Windows子系统执行.当程序启动的时候不会打开命令行(只对Windows有效)
-c,–nowindowed,–console 使用控制台子系统执行(默认)(只对Windows有效)
-s,–strip 可执行文件和共享库将run through strip.注意Cygwin的strip往往使普通的win32 Dll无法使用.
-X, –upx 如果有UPX安装(执行Configure.py时检测),会压缩执行文件(Windows系统中的DLL也会)(参见note)
-o DIR, –out=DIR 指定spec文件的生成目录,如果没有指定,而且当前目录是PyInstaller的根目录,会自动创建一个用于输出(spec和生成的可执行文件)的目录.如果没有指定,而当前目录不是PyInstaller的根目录,则会输出到当前的目录下.
-p DIR, –path=DIR 设置导入路径(和使用PYTHONPATH效果相似).可以用路径分割符(Windows使用分号,Linux使用冒号)分割,指定多个目录.也可以使用多个-p参数来设置多个导入路径
–icon=
–icon=
-v FILE, –version=FILE 将verfile作为可执行文件的版本资源(只对Windows系统有效)
-n NAME, –name=NAME 可选的项目(产生的spec的)名字.如果省略,第一个脚本的主文件名将作为spec的名字