使用pyinstaller将python脚本打包成exe文件

1.配置系统变量

安装需要用到pip工具,该工具在3.5版本的python中已经自带不用另行安装,但是需要在系统变量中添加python下的Scripts文件夹,如下图: 

在Path变量值中添加【;(python的安装目录)\Scripts】  *注意不要漏了最前面的分号

2.安装PyInstaller

用管理员权限安装

pip install pyinstaller

3.使用PyInstaller生成exe文件

#后面的路径为你的python文件的位置(如果第一步没有添加变量,这里还是要到Script下执行pyinstaller.exe文件)
pyinstaller -F C:\Users\wyc\Desktop\Auto\auto.py

基础命令:

命令

操作说明

-F

打包成单个文件

-D

打包成单个文件夹形式

-C

控制台模式,执行程序会跳出控制台

-w

窗口模式,不会跳出控制台

打开就可以运行了呢!

4.文件调用(音频,图片,图标等)

4.1定义相对路径函数

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

import time
import os, 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)

4.2调用路径

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

resource_path('resources/SING-fight.mp3')

4.3生成.spec文件

pyinstaller -F C:\Users\wyc\Desktop\Auto\pyResource1.py

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

[('resources\SING-fight.mp3',r'C:\Users\wyc\Desktop\Auto\resources\SING-fight.mp3','music'),],

元组内的三个项:

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

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

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

4.4添加ico和资源引用

打开.spec文件,会被正确引用:

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [('resources\SING-fight.mp3',r'C:\Users\wyc\Desktop\Auto\resources\SING-fight.mp3','music'),],
          name='Diary',  # 这里可以设置可执行文件的名字
          icon='SING.ico',# 设置图标
          debug=False,
          strip=None,
          upx=True,
          console=True ) # 是否开启控制台模式

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

添加图标的方法:

方法一:在执行打包命令时加入下面这句

--icon=xxx.ico

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

icon = ’xxx.ico‘

完整听音乐demo如下:

import time
import os, sys
import pygame

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)


def music():
    """
    定义一个播放音乐的函数
    :return:
    """
    pygame.mixer.init()
    print("播放音乐1")
    track = pygame.mixer.music.load(resource_path('resources/SING-fight.mp3'))
    pygame.mixer.music.play()
    # print("播放音乐2")
    # track1 = pygame.mixer.music.load("xx.mp3")
    # pygame.mixer.music.play()
    #
    # print("播放音乐3")
    # track2 = pygame.mixer.Sound("tkzc.wav")
    # track2.play()


def timer(n):
    '''''
    每n秒执行一次
    '''
    while True:
        print(time.strftime('%Y-%m-%d %X', time.localtime()))
        start()  # 此处为要执行的任务
        time.sleep(n)


def start():
    print('开始执行mp3文件')
    music()  # 播放音乐了
    print('mp3文件执行完毕')


timer(10)

说明:dist、bulid,pyResource1.spec文件是执行pyinstall之后生成的,在哪个文件夹执行就生成到哪个文件夹下;

4.5重新生成带音乐和图标的exe文件

删除dist和bulid文件夹,重新生成,对.spec文件打包

pyinstaller pyResource1.spec

双击执行exe文件,音乐可以听到

跳出cmd窗口表示执行中

附注:

1.图标转换网站:https://www.ico.la/

2.参考文档:http://blog.csdn.net/wws563/article/details/52242112#4%E4%BD%BF%E7%94%A8pyinstaller%E7%94%9F%E6%88%90exe%E6%96%87%E4%BB%B6

https://www.cnblogs.com/emptybox/p/5092643.html

http://blog.csdn.net/a6225301/article/details/47103447

3.音乐播放模块说明:

方法

说明

pygame.mixer.init()

或者只初始化音频部分

pygame.mixer.music.load('xx.mp3')

使用文件名作为参数载入音乐 ,音乐可以是ogg、mp3等格式。载入的音乐不会全部放到内容中,而是以流的形式播放的,即在播放的时候才会一点点从文件中读取。

pygame.mixer.music.play()

播放载入的音乐。该函数立即返回,音乐播放在后台进行。

pygame.mixer.music.play(loops=0, start=0.0)

loops和start分别代表重复的次数和开始播放的位置,如果是-1表示循环播放,省略表示只播放1次。第二个参数和第三个参数分别表示播放的起始和结束位置。

pygame.mixer.music.stop()

停止播放,

pygame.mixer.music.pause()

暂停播放

pygame.mixer.music.unpause()

取消暂停。

pygame.mixer.music.fadeout(time)

用来进行淡出,在time毫秒的时间内音量由初始值渐变为0,最后停止播放。

pygame.mixer.music.set_volume(value)

来设置播放的音量,音量value的范围为0.0到1.0。

pygame.mixer.music.get_busy()

判断是否在播放音乐,返回1为正在播放。

pygame.mixer.music.set_endevent(pygame.USEREVENT + 1)

在音乐播放完成时,用事件的方式通知用户程序,设置当音乐播放完成时发送pygame.USEREVENT+1事件给用户程序。

pygame.mixer.music.queue(filename)

使用指定下一个要播放的音乐文件,当前的音乐播放完成后自动开始播放指定的下一个。一次只能指定一个等待播放的音乐文件。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python爬虫实战

Python爬虫之四:今日头条街拍美图

运行平台: Windows Python版本: Python3.6 IDE: Sublime Text 其他工具: Chrome浏览器

891
来自专栏IMWeb前端团队

记一次Layer管理遇到的Bug及其相关问题的探索

本文作者:IMWeb DeepKolos 原文出处:IMWeb社区 未经同意,禁止转载 之前通过Udacity的浏览器渲染优化课程了解到其中有讲到一个...

19710
来自专栏Hongten

图片浏览器_js打造_源码开放

源码:http://files.cnblogs.com/hongten/source.zip

1732
来自专栏数据小魔方

用R语言抓取网页图片——从此高效存图告别手工时代

今天这个标题实在是有点言过其实了,对于R的爬虫知识,我只是领会了一点儿皮毛。 主要看不懂正则表达式,特别是那种一个括号里要匹配多种类型文本的语句,特像火星文,估...

48811
来自专栏恰童鞋骚年

微信小程序开发初探

  (1)一切以用户价值为依归→用户是微信的核心,所以微信中没有很多与客户无关的功能,比如QQ中的乱七八糟一系列东西。

4103
来自专栏熊二哥

Vue快速入门

终于进入国内当前最火的前端框架Vue.js的学习了,最近周边的哥们也开始用该框架做线上项目,闲暇之余,做个快速的了解,重在基础部分。 ? 基础概念 目前在国...

4588
来自专栏coding for love

我的前端技能树

客户端存储:Cookie,Web Stroge(Local&Session),离线缓存。

922
来自专栏自动化测试实战

Appium+python (3) 元素定位(1)

4167
来自专栏听雨堂

【8】数据浏览表格的快速输出

阅读目录 用什么来展示数据列表? 表格还是列表? 表头 对表格输出的封装 生成表格的实例 功能的扩展 在页面数据和控件的自动交换机制中,我们通过Pa...

2355
来自专栏老牟seo

塞尼铁克详解seo 外链的 4 种表现形式,了解一下!

seo 优化推广中,经常会谈及到外链的概念,外链即外部链接到我们网站的链接。对于一个网站来讲,外链越多,收录越好,排名越靠前。

861

扫码关注云+社区

领取腾讯云代金券