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

1.配置系统变量

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

在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窗口模式,不会跳出控制台

114526_10Iw_3018050.png

114648_69jd_3018050.png

114702_BkQU_3018050.png

打开就可以运行了呢!

 

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)

165304_fGM6_3018050.png

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

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

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

pyinstaller pyResource1.spec

165945_0FSl_3018050.png

170039_52Ju_3018050.png

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

170119_fXMJ_3018050.png

跳出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)使用指定下一个要播放的音乐文件,当前的音乐播放完成后自动开始播放指定的下一个。一次只能指定一个等待播放的音乐文件。

转载于:https://my.oschina.net/u/3018050/blog/1610937

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值