Python脚本打包为EXE可执行文件的完整指南:PyInstaller安装与使用详解
本文详细介绍如何使用PyInstaller将Python脚本打包为Windows可执行文件。涵盖从pip安装、基础命令到常用参数(如-F、-w、-p)的具体用法,并通过游戏实例演示打包过程,解决依赖路径、窗口显示及文件体积等问题,帮助开发者轻松实现Python应用的跨机器分发。
PyInstaller简介与版本支持
一、PyInstaller简介
PyInstaller是一个用于将Python脚本打包成独立可执行文件的工具,它使得程序可以在没有安装Python环境的计算机上直接运行。
当前最新版本为PyInstaller 3.1.1,支持Python 2.7及Python 3.3及以上版本。该工具兼容Windows、Mac和Linux操作系统。需要注意的是,它不支持跨平台编译,即在Windows下生成的exe文件仅能在Windows系统中运行,而在Linux下生成的二进制文件也仅适用于Linux环境。
Windows环境下的安装步骤
二、在Windows环境下安装PyInstaller
在Windows系统中,可以通过执行命令pip install pyinstaller来完成安装。需要注意的是,PyInstaller在Windows下运行依赖于PyWin32库。如果在通过pip安装PyInstaller时未检测到PyWin32,系统会自动安装pypiwin32作为替代方案。


当命令行输出“Successfully installed pyinstaller-3.1.1 pypiwin32-219”时,即表示安装成功。
打包命令与常用参数详解
三、打包操作流程
打包生成的应用程序不包含原始源代码,但会将脚本编译后的.pyc文件包含在内。
其基本语法格式为:pyinstaller options myscript.py,其中options代表各种可选参数。
以下是常用的可选参数列表:
–onefile:将打包结果合并为单个可执行文件。 –onedir:将所有结果打包到一个文件夹中,该文件夹包含一个可执行文件以及运行所需的依赖文件(此为默认模式)。 –paths=DIR:指定导入模块的搜索路径。 –distpath=DIR:指定打包结果文件的输出目录。 –specpath=DIR:指定生成的.spec配置文件存放路径。 –windowed:使用Windows子系统执行,运行时无需打开命令行窗口(仅对Windows有效)。 –nowindowed:使用控制台子系统执行,运行时会显示命令行窗口(此为默认模式,仅对Windows有效)。 –icon=<FILE.ICO>:将指定的.ico文件添加为可执行文件的图标资源(仅对Windows有效)。
例如,执行命令pyinstaller --paths="D:\Queena" guess_exe.py即可指定特定路径进行打包。
Windows下打包实例演示
四、Windows下的实际打包实例
假设已编写好游戏脚本guess_exe.py,其核心代码逻辑如下:
__author__ = 'zhou'
# -*- coding:utf-8 -*-
# 摇3次骰子,当总数total,3<=total<=10时为小,11<=total<=18为大
import random
import time
def enter_stake(current_money):
'''输入小于结余的赌资及翻倍率,未考虑输入type错误的情况'''
stake = int(input('How much you wanna bet?(such as 1000):'))
rate = int(input("What multiplier do you want?你想翻几倍?(such as 2):"))
small_compare = current_money < stake * rate
while small_compare == True:
stake = int(input('You has not so much money ${}!How much you wanna bet?(such as 1000):'.format(stake * rate)))
rate = int(input("What multiplier do you want?你想翻几倍?(such as 2):"))
small_compare = current_money < stake * rate
return stake,rate
def roll_dice(times = 3):
'''摇骰子'''
print('<<<<<<<<<< Roll The Dice! >>>>>>>>>>')
points_list = []
while times > 0:
number = random.randrange(1,7)
points_list.append(number)
times -= 1
return points_list
def roll_result(total):
'''判断是大是小'''
is_big = 11 <= total <= 18
is_small = 3 <= total <= 10
if is_small:
return 'Small'
elif is_big:
return 'Big'
def settlement(boo,points_list,current_money,stake = 1000,rate = 1):
'''结余'''
increase = stake * rate
if boo:
current_money += increase
print('The points are ' + str(points_list) + ' .You win!')
print('You gained $' + str(increase) + '.You have $' + str(current_money) + ' now.' )
else:
current_money -= increase
print('The points are ' + str(points_list) + ' .You lose!')
print('You lost $' + str(increase) + '.You have $' + str(current_money) + ' now.' )
return current_money
def sleep_second(seconds=1):
'''休眠'''
time.sleep(seconds)
# 开始游戏
def start_game():
'''开始猜大小的游戏'''
current_money = 1000
print('You have ${} now.'.format(current_money))
sleep_second()
while current_money > 0:
print('<<<<<<<<<<<<<<<<<<<< Game Starts! >>>>>>>>>>>>>>>>>>>>')
your_choice = input('Big or Small: ')
choices = ['Big','Small']
if your_choice in choices:
stake,rate = enter_stake(current_money)
points_list = roll_dice()
total = sum(points_list)
actual_result = roll_result(total)
boo = your_choice == actual_result
current_money = settlement(boo,points_list,current_money,stake,rate)
else:
print('Invalid input!')
else:
sleep_second()
print('Game Over!')
sleep_second(2)
if __name__ == '__main__':
start_game()
接下来,在命令行中切换到guess_exe.py所在的目录,并输入以下打包命令:
pyinstaller --onefile --nowindowed --icon="D:\Queena\PyCharmProjects\dist1\computer_three.ico" guess_exe.py


执行上述命令后,当前目录下会生成build文件夹、dist文件夹以及一个.spec配置文件。其中,dist文件夹内包含了最终生成的guess_exe.exe可执行文件。
[外链图片转存失败(img-NSV511rc-1562767762570)(https://upload-images.jianshu.io/upload_images/6152595-56dc5aad9152513e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
详细操作指南与参数注意事项
1、首先确保已安装pip,随后执行pip install pyinstaller进行PyInstaller的安装。
(注:由于作者之前已安装过pyinstaller,为方便演示进行了卸载,不确定这是否会影响最终显示效果。但确认安装成功后,命令行会提示“Successfully installed pyinstaller”。)

2、定位到pyinstaller.exe所在的文件夹(通常位于Python安装目录下的“scripts”文件夹中)。
(温馨提示:在cmd命令行中使用Tab键可以实现命令补全功能,提高输入效率。)

3、在命令后添加需要转换的Python文件路径(两者之间需保留空格)。
若在pyinstaller.exe命令后加上-F参数,则会将应用打包为一个单独的exe文件(文件体积相对较大);若不加-F,则会生成包含各种库文件的文件夹。若加上-w参数,则打包为不带cmd窗口的exe程序;若不加-w,运行时会出现cmd窗口。(具体是否添加这些参数可根据个人喜好决定。)

4、添加-F参数的效果示例

未添加-F参数的效果示例

未添加-w参数的效果示例
(如果添加了-w参数,则运行时不会出现后面的黑色命令行窗口。)

1、关于-F指令的说明
请注意指令区分大小写,此处必须为大写-F。使用-F指令可以将应用打包成一个独立的exe文件;如果不使用该指令,则打包结果是一个包含各种dll和依赖文件的文件夹。

2、关于-p指令的说明
该指令后可以增加pyinstaller搜索模块的路径。由于应用打包涉及众多模块,用户可以手动添加所需路径。不过经过笔者测试,site-packages目录下的模块通常可以被自动识别,因此一般无需手动添加路径。

简易Hello World打包示例
补充:如何将Python的.py文件转换为可执行的.exe文件。
首先,我编写了一个简单的print(“hello,world”).py文件,并将其命名为hello.py,保存在电脑C盘的C:\Users\ly目录下,如图所示。
ps:建议尽量将源文件保存在该文件夹下。如果选择其他盘的文件夹,生成的.exe的dist文件夹也会出现在该C盘路径下;而且如果保存在其他盘下,有时可能会出现错误,导致打包不成功。

利用pip安装Python的工具库pyinstaller。
pip install pyinstaller
安装成功后的界面如下:
在命令窗口中输入:pyinstaller -F C:\Users\ly\hello.py
注意:F一定要大写。
执行完毕后,可以在该路径下的dist文件夹中找到与源文件同名的hello.exe文件。

总结
到此这篇关于Python脚本导出为exe程序的方法的文章就介绍到这了,更多相关Python导出exe程序内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









