7

Python打包总结(pyinstaller)

 3 years ago
source link: https://greyli.com/python-package-summary-pyinstaller/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Python打包总结(pyinstaller)

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

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

一、安装及基本操作

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

pip install pyinstaller

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

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

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

cd C:UsersAdministratorprojectstomato

然后执行如下命令:

pyinstaller start.py -F

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

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

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

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

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

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

<span style="color: #008080;">Import os
Import sys 
def resource_path(relative_path):
    定义一个读取相对路径的函数
    if hasattr(sys, "_MEIPASS"):
      base_path = sys._MEIPASS
    else:
      base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)</span>

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

resource_path('resources/complete.wav')

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

[('resources/complete.wav',r'C:UsersAdministratorresourcescomplete.wav','music'),],

元组内的三个项:

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

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

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

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

如下所示:

<span style="color: #008080;">exe = EXE(pyz,
      a.scripts,
     a.binaries,
     a.zipfiles,
         a.datas,               
         [('resources/complete.wav',r'C:UsersAdministratorprojectsDiaryresourcescomplete.wav','music'),],
      name='Diary',  # 这里可以设置可执行文件的名字
      icon='diary.ico',# 设置图标
      debug=False,
      strip=None,
      upx=True,
      console=True ) # 是否开启控制台模式</span>

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

三、添加图标

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

--icon=xxx.ico

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

icon = ’xxx.ico‘

(见上面的代码第八行)

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

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

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

五、替代品

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

py2exe

cx_Freeze

本条目发布于2016年1月2日。属于计算机与编程分类,被贴了 Python 标签。 ← 英文标点符号用法整理 我的第一个GUI程序 →

撰写评论 取消回复

电子邮件地址不会被公开,必填项已用*标出。

评论

姓名 *

电子邮件 *

站点

在此浏览器中保存我的名字、电邮和网站。

当有人回复我时,发送电子邮件提醒我。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK