用python写的工具写好了,想打包然后发给测试同事使用,最后选择了PyInstaller,支持Windows、Linux、OS X,支持打包成一个文件夹或单个EXE文件。
 
我是直接在线安装的,在CMD输入:pip install pyinstaller
自动下载了PyInstaller-3.1.1.tar.gz和pypiwin32-219-cp27-none-win_amd64.whl并安装。
 
如果不行也可以去官网自己下载安装(http://www.pyinstaller.org/),不过应该要先安装pypiwin32。
 
安装后,把要打包的文件main.py(界面),b.py(逻辑,在main中调用),config.ini(配置文件)复制到F:\pkg
 
在CMD中进入F:\pkg,输入:pyinstaller main.py
然后就在F:\pkg生成build和dist文件夹和一个main.spec配置文件,dist下就是打包好的文件了,运行main.exe,一闪就没了,在CMD再次运行,报错是找不到ini文件,把ini复制到dist下,再次运行,可以了。
 
但是运行main.exe后,会多出一个CMD窗口。后面搜索后查找有一个参数-w, --windowed,
--noconsole
可以关闭控制窗口。
 
删除打包的文件,重新打包:pyinstaller -w --windowed --noconsole
main.py
将config.ini复制过去后再次运行,OK了,这次没有控制窗口了,不过程序在调用subprocess时,仍会闪现一下控制窗口,不过没关系了,这也算间接提示我命令运行了吧。但我的程序后来还遇到个问题,有个函数以此方法打包,会无法调用。
 
 
 
然后再想,打包不可能需要手动复制ini文件的,应该可以一起打包进去。
再次查询pyinstaller的官方wiki,发现可以编辑main.spec实现。类似这样
a = Analysis(...
   
 datas=[ ('src/README.txt', '.') ],
   
 ...
   
 )
只要修改datas元组就可以了。第一参数是文件目录,第二个参数是放在打包好的文件的目录,'.'就是首级目录了
 
修改后,再运行命令pyinstaller -w --windowed --noconsole main.spec
OK了,这次打包的时候直接就把config.ini打进去了,不过我怎么觉得还是我复制过去更方便呢。。。
 
 
 
以上打包都是打成一个文件夹,后来试了下打成单个EXE
命令:pyinstaller -F -w --windowed --noconsole main.py
然后同样把config.ini复制过去就OK了
 
 
 
然后我们可以加个图标。首先找个图片,然后去http://www.ico.la/转换一下格式,我选的128*128
将保存的图片ico.ico放到F:\pkg
输入命令:pyinstaller -F -w --windowed --noconsole -i ico.ico
main.py
 
 
参考:
官方WIKI:http://pythonhosted.org/PyInstaller/#using-spec-files
http://www.cnblogs.com/mywolrd/p/4756005.html
http://www.crifan.com/use_pyinstaller_to_package_python_to_single_executable_exe/
http://www.cnblogs.com/DxSoft/archive/2010/05/14/1735199.html
 

PyInstaller打包python脚本的更多相关文章

  1. PyInstaller打包python脚本的一些心得

    PyInstaller打包python脚本的一些心得 因为在公司经常要帮同事做一个从excel表格中提取出需要的内容的重复工作,比较繁琐还容易出错:于是就想着要写个程序,但是同事又不可能在电脑上也装上 ...

  2. PyInstaller打包Python脚本为exe

    1.PyInstaller-3.1.1  百度云链接  http://pan.baidu.com/s/1jHYWin8 密码  oapl 2.安装最新版本的 pywin32-217.win32-py2 ...

  3. 打包python脚本为exe可执行文件-pyinstaller和cx_freeze示例

    本文介绍使用cx_freeze和pyinstaller打包python脚本为exe文件 cx_freeze的使用实例 需要使用到的文件wxapp.py, read_file.py, setup.py ...

  4. 打包python脚本为exe的坎坷经历, by pyinstaller方法

    打包python脚本为exe的坎坷经历, by pyinstaller方法 又应验了那句歌词. 不经历风雨, 怎么见得了彩虹. 安装过程略去不提, 仅提示: pip install pyinstall ...

  5. PyInstaller 打包 python程序成exe

    pychaim下PyInstaller 打包 python程序 主题是使用PyInstaller 打包python时遇到一些问题以及解决方案,其中将要打包的程序是用tensorflow做的LSTM算法 ...

  6. “failed to excute script xxx” PyInstaller 打包python程序为exe文件过程错误

    在使用PyInstaller打包python程序,打包命令为: pyinstaller -F -w -i manage.ico yourpyfile.py 顺便说一下几个参数的作用 -F:是直接生成单 ...

  7. 利用pyinstaller将python脚本打包发布

    之前写了一个小工具,将excel配置表转换为json.xml.lua等配置文件.最近在学习egret,正好需要转换配置文件,刚好就用上了.然而当我想把工具拷到工作目录时,就发愁了.之前我为了方便扩展, ...

  8. PyInstaller把Python脚本打包成可执行程序教程

    一.说明 一直以来都有把.py文件打包成.exe文件的想法,但总是不够强烈,每次拖着拖着就淡忘了. 昨天帮硬件部门的同事写了个脚本,然后今天下午的时候,他问有没有办法把脚本打包成可执行文件,这样方便以 ...

  9. Pyinstaller打包Selenium脚本为exe文件执行问题

    由于同事辞职,许多运维工具的维护工作就交到我这里处理了,运维居然没人会Python脚本! 用Selenium编写的一个爬虫脚本cctv.py,需要给不懂软件的人运行.为了不让他去搭建,安装各种包,库, ...

随机推荐

  1. UINavigationControlle 之 UINavigationBar及navigationItem关系探讨

    在设置标题栏时常常遇到修改标题.修改返回按钮标题.增加一些按钮等需求,实现过程中一般会把UINavigationController.UINavigationBar.navigationItem及se ...

  2. iOS 当使用FD_FullscreenPopViewController的时候遇到scrollView右滑手势无法使用的解决

    当我们在ViewController中有scrollView的时候, 可能会遇到右滑无法响应返回手势, 有以下解决办法: 自定义scrollView, 实现该scrollView的以下方法即可: @i ...

  3. HDU2612 BFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612 , 一道比较简单的广搜(BFS)题目. 算法: 设置两个dist[][]数组,记录Y和M到几个K ...

  4. POJ 3666 Making the Grade(区间dp)

    修改序列变成非递减序列,使得目标函数最小.(这题数据有问题,只要求非递减 从左往右考虑,当前a[i]≥前一个数的取值,当固定前一个数的取值的时候我们希望前面操作的花费尽量小. 所以状态可以定义为dp[ ...

  5. python_59_装饰器2

    #匿名函数,无函数名 calc=lambda x:x*3 print(calc(3)) sum=lambda x,y,z:x+y+z print(sum(1,2,3)) ''' 高阶函数 a:把一个函 ...

  6. python_21_copy

    import copy person=['name',['saving',100]] #3种浅copy方式 p1=copy.copy(person) p2=person[:] p3=list(pers ...

  7. Linux学习记录(二)

    1.远程连接工具的使用 实际开发中,Linux服务器都在其他的地方,我们要通过远程的方式去连接Linux并操作它,Linux远程的操作工具有很多,企业中常用的有Puttty.secureCRT.SSH ...

  8. SummerVocation_Learning--java的多线程实现

    java的线程是通过java.lang.Thread类来实现的. 可以通过创建Thread的实例来创建新的线程. 每个线程都是通过某个特定Thread对象所对应的方法run()来完成操作,方法run( ...

  9. 【组合数学】cf660E. Different Subsets For All Tuples

    比较套路的组合数学题 For a sequence a of n integers between 1 and m, inclusive, denote f(a) as the number of d ...

  10. setInterval与setTimeout

    在自己用canvas画一个时钟时,画秒钟用的是利用图片将重复的线条遮住,但是会出现有两个秒钟线条同时存在,才想起setInterval有那么个坑,查了点资料,记录下,若有不对的或者未写到的点,还请大家 ...