使用pyinstaller將python腳本打包成exe文件

1.配置系統變量

安裝須要用到pip工具,該工具在3.5版本的python中已經自帶不用另行安裝,可是須要在系統變量中添加python下的Scripts文件夾,以下圖: 
Pathhtml

在Path變量值中添加【;(python的安裝目錄)\Scripts】 
*注意不要漏了最前面的分號python

 

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定義相對路徑函數

在腳本定義一個讀取相對路徑的函數:oop

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()中加入下面這行:spa

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

元組內的三個項:.net

第一個爲代碼中resource_path包裹的地址;debug

第二個是文件的實際地址;

第三個是打包進程序的文件名字

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) 使用指定下一個要播放的音樂文件,當前的音樂播放完成後自動開始播放指定的下一個。一次只能指定一個等待播放的音樂文件。
相關文章
相關標籤/搜索