码迷,mamicode.com
首页 > 其他好文 > 详细

Pyhton打包总结(pyinstaller)

时间:2015-12-31 22:40:21      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:

 

在学《Leanrn Python the Hard Way》时做了一个文字游戏,想要分享给朋友玩。于是便想把程序打包成 .exe 文件,尝试了py2exe,出了很多问题,花了很多时间查来查去最后还是没有成功。然后试了pyinstaller,虽然也遇到了一些问题,但终于完成了。

(英文好的建议直接去看官方文档

 

、安装及基本操作

 

Pyinstaller可以使用pip安装,在命令行下输入下面这行就可以了。

 

pip install pyinstaller

 

如果下载安装包,那么要注意下载相应的win32/64版本,建议所有的程序都统一成32位或是64位版本,这样会减少很多问题。

 

安装完毕之后,就可以通过以下命令打包了

先转到主脚本所在的地址,例如:

 

cd C:\Users\Administrator\projects\tomato

 

然后执行如下命令:

pyinstaller start.py -F

 

其中start.py为主脚本,主脚本中调用的模块文件会被自动打包。第三个参数是操作命令,常用的命令有

-F 打包成单个文件
-D 打包成单个文件夹形式
 
-c 控制台模式,执行程序会跳出控制台,
-w 窗口模式,不会跳出控制台 

 

基础的命令就这些,程序名和图标等建议在spec文件中设置。

 

二、文件调用(音频,图片等)

 

一开始打包时便不清楚文件调用问题,因此文件一旦移动到别处就没法正常调用。后来看到别人的教程,但这部分也是模棱两可,让人理解不了。后来结合官方文档和别人的教程,终于弄清楚了。

 

首先在脚本定义一个读取相对路径的函数:

 1 Import os
 2 Import sys
 3  
 4 def resource_path(relative_path):
 5     """
 6     定义一个读取相对路径的函数
 7       """
 8     if hasattr(sys, "_MEIPASS"):
 9         base_path = sys._MEIPASS
10     else:
11         base_path = os.path.abspath(".")
12     return os.path.join(base_path, relative_path)

 

然后在需要调用文件的地方用如下格式包裹:

resource_path(resources/complete.wav)

 

然后在生成的.spec文件exe = EXE()中加入下面这行:

[(resources/complete.wav,rC:\Users\Administrator\resources\complete.wav,music),],

 

元组内的三个项:

第一个为代码中resource_path包裹的地址;

第二个是文件的实际地址;

第三个是打包进程序的文件名字。

 

这样打包后文件会被正确引用。

如下所示:

 1 exe = EXE(pyz,
 2           a.scripts,
 3           a.binaries,
 4           a.zipfiles,
 5           a.datas,
 6           [(resources/complete.wav,rC:\Users\Administrator\projects\Diary\resources\complete.wav,music),],
 7           name=Diary,  # 这里可以设置可执行文件的名字
 8           icon=diary.ico,# 设置图标
 9           debug=False,
10           strip=None,
11           upx=True,
12           console=True ) # 是否开启控制台模式

 

注意加地址前的r以及行尾的逗号,更新过spec文件后,再重新打包只需要执行pyinstaller start.spec 就可以了。

 

三、添加图标

 

图标的设置有两种方式,一种是在执行打包命令时加入下面这句:

--icon=xxx.ico

 

第二种(推荐)是用文本编辑器或记事本打开执行打包后文件夹内新生成的xxx.spec文件,然后在exe =()中加入一行:

icon = ’xxx.ico‘

 

(见上面的代码第八行)

xxx.ico 为你要设置的图标文件,其他格式需要转换成ico格式,可在这里在线转换。

(图标文件要放在程序根目录下)

 

四、其他

 

  1. 64windows上打包的程序不能在32位上运行,反之却可以。
  2. 每次更改完代码或是spec文件,只需要再重新执行一下pyinsyaller start.spec -F就可以了

 

五、替代品

 

如果pyinstaller没有解决你的问题,那么你可以尝试一下下面这两个替代品:

py2exe

cx_Freeze

 

Pyhton打包总结(pyinstaller)

标签:

原文地址:http://www.cnblogs.com/emptybox/p/5092643.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!