pyinstaller的傻瓜式用法

PyInstaller是一个能将Python程序打包成可执行文件的优秀第三方库,Python程序打包后,新的程序就可以在没有安装Python的电脑上运行。pyinstaller最新版本已经支持绝大部分操作系统。

在日常编程时,我经常会用Python帮家人、朋友和学生处理一些小问题,然而他们的电脑上很可能并未安装Python,此时我们先对程序打包,然后就可以直接发给他们使用了。

需求

说明

最近有的班陆续要从micro:bit转向学Python,这就要求学生们从用鼠标转移到用键盘,那么提前练习打字,熟悉各按键的位置就很有必要。

下面的打字游戏代码就是本次要打包的项目。

打字游戏简介

打字游戏是一个比较有意义的项目,既能打字,又是游戏。[doge]
以下是使用pygame编写的简单版打字游戏:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import random
import sys

import pygame
from pygame.locals import KEYDOWN

pygame.init()
screen = pygame.display.set_mode((800, 600))

myfont = pygame.font.Font(None, 80)

diff_ticks = 20
ticks = pygame.time.get_ticks() + diff_ticks
word_diff_ticks = 1000
word_ticks = pygame.time.get_ticks() + word_diff_ticks


def get_random_word():
"""
获取随机的字母,使用ascii码
:return: x, y, 字母, 字母颜色
"""
color = (random.randint(0, 255), random.randint(0, 255),
random.randint(0, 255)) # 颜色随机
x = random.randint(100, 800 - 100) # x坐标从左右边距各100之间随机
y = 0
word = random.randint(65, 90)
return [x, y, word, color]


arr = [get_random_word()] # 创建初始列表

state = 1 # 1.进行中 2.失败
flash = 1
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()

if state == 1 and len(arr) > 0 and event.type == KEYDOWN:
if event.key == arr[0][2] + 32: # 大小写字母差32
arr.pop(0) # 如果打字正确,从列表中弹出

screen.fill((255, 255, 255)) # 白色背景

for i in range(len(arr)): # 绘制这些字母
x, y, word, c = arr[i]
if i == 0 and flash:
c = (random.randint(0, 255), random.randint(0, 255),
random.randint(0, 255)) # 随机颜色
textImage = myfont.render(chr(word), True, c)
screen.blit(textImage, (x, y))

if state == 2: # 失败,结束程序
sys.exit()

if state == 1:
if pygame.time.get_ticks() >= word_ticks: # 计时增加新字母
word_ticks += word_diff_ticks
arr.append(get_random_word())

if pygame.time.get_ticks() >= ticks:
ticks += diff_ticks
flash = 1 - flash
for i in range(len(arr)):
arr[i][1] += 1
if len(arr) > 0 and arr[0][1] > 600: # 闪烁的字母的y坐标大于600
state = 2

pygame.display.flip()

pyinstaller的使用

安装与升级

如果你没有安装过pyinstaller,在终端(命令提示符)使用pip安装

1
pip install pyinstaller

如果你安装过pyinstaller,想要使用最新版本,在终端(命令提示符)使用pip升级

1
pip install --upgrade pyinstaller

使用方法

快速

直接在终端输入命令pyinstaller和你要打包的py文件路径,例如:

1
pyinstaller test.py

待命令执行完毕后,日志信息最后出现successfully就代表打包成功。

打包会生成一些文件和文件夹,在dist文件夹中就可以找到我们想要的打包好的程序。

常用参数

pyinstaller提供了很多命令参数,用户可以根据需要进行选择。官方文档列出了全部的参数,以下我只选择一些我用过的:

参数 缩写 说明
--onedir -D 打包多个文件,在dist中生成很多依赖文件
--windowed, --noconsole -w 使用Windows子系统执行,当程序启动的时候不会打开命令行
–-icon=<FILE.ico> -i file.ico添加为可执行文件的资源

打包打字游戏

这里我们以打字游戏为例,对它进行Windows和macOS不同系统的打包,并为了美观加上一个图标。

图标下载

推荐阿里巴巴矢量图标库,搜索想要的图标后,可以根据需求选择大小和格式进行下载。

执行命令

我们将py文件与图标放在同一个文件夹下,并在终端执行打包命令,对于Windows系统和macOS系统,需要分开操作。

这里的不同系统是指打包好的程序需要再哪种系统运行,打包过程的命令可以在任一系统进行,不受影响

  • Windows
1
pyinstaller -w -F -i FILE.ico 打字训练.py 

  • macOS
    1
    pyinstaller -w -D -i FILE.ico 打字训练.py 

运行试试效果吧!