前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用pyinstaller将python脚本打包成exe文件

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

作者头像
晓歌
发布2018-08-15 13:09:44
1.8K0
发布2018-08-15 13:09:44
举报
文章被收录于专栏:破晓之歌破晓之歌

1.配置系统变量

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

Path
Path

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

2.安装PyInstaller

用管理员权限安装

代码语言:javascript
复制
pip install pyinstaller

3.使用PyInstaller生成exe文件

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

基础命令:

命令

操作说明

-F

打包成单个文件

-D

打包成单个文件夹形式

-C

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

-w

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

打开就可以运行了呢!

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

4.1定义相对路径函数

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

代码语言:javascript
复制
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调用路径

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

代码语言:javascript
复制
resource_path('resources/SING-fight.mp3')

4.3生成.spec文件

代码语言:javascript
复制
pyinstaller -F C:\Users\wyc\Desktop\Auto\pyResource1.py

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

代码语言:javascript
复制
[('resources\SING-fight.mp3',r'C:\Users\wyc\Desktop\Auto\resources\SING-fight.mp3','music'),],

元组内的三个项:

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

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

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

4.4添加ico和资源引用

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

代码语言:javascript
复制
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 就可以了。

添加图标的方法:

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

代码语言:javascript
复制
--icon=xxx.ico

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

代码语言:javascript
复制
icon = ’xxx.ico‘

完整听音乐demo如下:

代码语言:javascript
复制
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文件打包

代码语言:javascript
复制
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)

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.配置系统变量
  • 2.安装PyInstaller
  • 3.使用PyInstaller生成exe文件
  • 4.文件调用(音频,图片,图标等)
    • 4.1定义相对路径函数
      • 4.2调用路径
        • 4.3生成.spec文件
          • 4.4添加ico和资源引用
          • 完整听音乐demo如下:
            • 4.5重新生成带音乐和图标的exe文件
            • 附注:
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档