1. 程式人生 > >【python】pyinstaller 打包

【python】pyinstaller 打包

起因

  • 明日七夕好友表白在網上找到一個表白工具,地址如下 python表白工具
  • 由於需要使用python才可以執行,故而使用pyinstaller 進行打包

程式碼說明

  • 本文表白程式碼來自程式碼
  • 檔案路徑 這裡寫圖片描述
import sys
import random
import pygame
from pygame.locals import *

WIDTH, HEIGHT = 640, 480
BACKGROUND = (0, 191, 255)


# 按鈕
def button(text, x, y, w, h, color, screen)
:
pygame.draw.rect(screen, color, (x, y, w, h)) font = pygame.font.Font(fontfontfont(), 20) textRender = font.render(text, True, (0, 0, 0)) textRect = textRender.get_rect() textRect.center = ((x + w / 2), (y + h / 2)) screen.blit(textRender, textRect) # 標題 def title(text, screen, scale, color=(255
, 0, 0)
)
:
font = pygame.font.Font(fontfontfont(), WIDTH // (len(text) * 2)) textRender = font.render(text, True, color) textRect = textRender.get_rect() textRect.midtop = (WIDTH / scale[0], HEIGHT / scale[1]) screen.blit(textRender, textRect) # 生成隨機的位置座標 def get_random_pos(): x, y = random.randint(20
, 620), random.randint(20, 460) return x, y # 點選喜歡按鈕後顯示的頁面 def show_like_interface(text, screen, color=(255, 0, 0)): screen.fill(BACKGROUND) font = pygame.font.Font(fontfontfont(), WIDTH // (len(text))) textRender = font.render(text, True, color) textRect = textRender.get_rect() textRect.midtop = (WIDTH / 2, HEIGHT / 2) screen.blit(textRender, textRect) pygame.display.update() while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() # 主函式 def main(): pygame.init() screen = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32) pygame.display.set_caption('FROM一個喜歡你很久的小哥哥') clock = pygame.time.Clock() pygame.mixer.music.load(mpmpmp()) pygame.mixer.music.play() # sleep(60) # # pygame.mixer.music.stop() pygame.mixer.music.set_volume(0.25) # unlike_pos_x = 330 unlike_pos_y = 300 unlike_pos_width = 100 unlike_pos_height = 50 like_pos_x = 180 like_pos_y = 300 like_pos_width = 100 like_pos_height = 50 running = True like_color = (255, 0, 255) while running: screen.fill(BACKGROUND) img = pygame.image.load(aaaaasdasdad()) imgRect = img.get_rect() imgRect.midtop = WIDTH // 2, HEIGHT // 4 screen.blit(img, imgRect) for event in pygame.event.get(): if event.type == pygame.MOUSEBUTTONDOWN: mouse_pos = pygame.mouse.get_pos() if mouse_pos[0] < like_pos_x + like_pos_width + 5 and mouse_pos[0] > like_pos_x - 5 and \ mouse_pos[1] < like_pos_y + like_pos_height + 5 and mouse_pos[1] > like_pos_y - 5: like_color = BACKGROUND running = False mouse_pos = pygame.mouse.get_pos() if mouse_pos[0] < unlike_pos_x + unlike_pos_width + 5 and mouse_pos[0] > unlike_pos_x - 5 and \ mouse_pos[1] < unlike_pos_y + unlike_pos_height + 5 and mouse_pos[1] > unlike_pos_y - 5: while True: unlike_pos_x, unlike_pos_y = get_random_pos() if mouse_pos[0] < unlike_pos_x + unlike_pos_width + 5 and mouse_pos[0] > unlike_pos_x - 5 and \ mouse_pos[1] < unlike_pos_y + unlike_pos_height + 5 and mouse_pos[1] > unlike_pos_y - 5: continue break title(u'小姐姐,我觀察你很久了', screen, scale=[2, 10]) title(u'做我女朋友好不好呀', screen, scale=[2, 6]) button(u'好呀', like_pos_x, like_pos_y, like_pos_width, like_pos_height, like_color, screen) button(u'算了吧', unlike_pos_x, unlike_pos_y, unlike_pos_width, unlike_pos_height, (255, 0, 255), screen) pygame.display.flip() pygame.display.update() clock.tick(60) show_like_interface(u'我就知道小姐姐你也喜歡我~', screen, color=(255, 0, 0)) # 下面的返回檔案之所以用 ./1/file 的原因是解壓後會生成在一個叫做1的資料夾中 這個1 是在spce中的datas設定的 def aaaaasdasdad(): return r"./1/84_wide.jpg" def fontfontfont(): return r'./1/simkai.ttf' def mpmpmp(): return r'./1/1.mp3' if __name__ == '__main__': main()
  • 首先安裝pyinstaller pip install pyinstaller
  • 進入該檔案所在的目錄執行 pyi-makespec ***.py
  • 執行完成後會得到一個 和py檔案相同名字的 .spec檔案
    這裡寫圖片描述

預設生成檔案如下

# -*- mode: python -*-

block_cipher = None


a = Analysis(['12.py'],
             pathex=['G:\\work\\untitled\\bbbb'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=True,
          name='12',
          debug=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='12')
  • 我們需要修改的地方有
    • datas=[], [(“檔案路徑”,”解壓後路徑”)] 檔案路徑建議直接就放在同級目錄下修改方便
    • console=True 是否顯示DOS

修改後

# -*- mode: python -*-

block_cipher = None


a = Analysis(['12.py'],
             pathex=['D:\\PycharmProjects\\untitled3\\bbbb'],
             binaries=[],
             datas=[("1.mp3",'1'),
             ('84_wide.jpg','1'),
             ('simkai.ttf','1')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=True,
          name='12',
          debug=False,
          strip=False,
          upx=True,
          console=False )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='12')
  • 打包後文件
    這裡寫圖片描述
  • datas設定的檔案
    這裡寫圖片描述

交流群

160787372