要想在没有安装 Python 集成环境的电脑上运行开发的
Python 程序,必须把 Python 文件打包成 .exe 格式的可执行
文件。
Python 的打包工作 PyInstaller 提供了两种把 .py 文件包
成 .exe 文件的方式:
第一种方式是把由 .py 文件打包而成的 .exe 文件及相
关文件放在一个目录中 。 这种方式是默认方式,称为 onedir
方式。
第二种方式是加上-F 参数后把制作出的 .exe 打包成一
个独立的 .exe 格式的可执行文件 , 称为 onefile 方法 。
安装 Pyl nstaller
pip3 install pyinstaller
Pylnstaller 使用方法
PyInstaller 有两种制作 exe 文件的方法。

print("Hello Python")
a=input("请按任意键结束!")
exit

以 onedir 方式制作 .exe 可执行文件
切换到 Hello.py 应用程序所在的目录,然后用
pyinstaller Hello.py 命令把 Hello.py 程序打包成 onedir 方式的 .exe 文件 。

打包完成后,在 Hello.py 所在的目录下生成了 Hello.spec 文件和 build 、 dist 两个
子目录 。 其中 dist 子目录中又创建了 Hello 子目录, Hello 子目录中生成了许多文件,
其中就有一个名为 Hello.exe 的文件,我们只要把整个 Hello 目录复制到其他计算机
中,就可以在其他计算机上执行这个 Hello.exe 文件。

双击就可以运行那个hello.exe文件了,就算本机没有安装python也能运行这个文件。

实际制作 onefile 式的 .exe 文件
现在我们通过下列程序来学习 onfi le 式的打包方法 。 程序内容如下:

完成之后,会在 Hello2.py 程序所在的目录下生成 He llo2 叩巳c 文件和 build 、
dist 两个子目录,其中 dist 子目录中只建立了 一 个 Hello2.exe 可执行文件,因为
pyinstaller 己将所有相关的包都包含在了 He llo2.exe 文件中,所以我们只要把 He llo2 .
exe 文件复制到其他计算机上就可以运行了。

双击就能运行这个文件了,就算本机不安装python也能正常运行。

项目打包为可执行文件
在实际应用上, 一般的 Python 程序不会这么简单,可能还包含很多包或是相
关的资源文件,如图片、声音,甚至用 se lenium 执 行 webdriver 时,还必须用到
ChromeDriver.exe 建立 Google Chrome 浏览器等复杂情况。

以 onefile 方式打包 mp3player 声音播放程序

def choose(): # 选曲
global playsong
msg.set("\n播放歌曲:" + choice.get())
playsong=choice.get() def pausemp3(): #暂停
mixer.music.pause()
msg.set("\n暂停播放 {}".format(playsong)) def increase(): #加大音量
global volume
volume +=0.1
if volume>=1:
volume=1
mixer.music.set_volume(volume) def decrease(): #调小音量
global volume
volume -=0.1
if volume<=0.3:
volume=0.3
mixer.music.set_volume(volume) def playmp3(): #播放
global status,playsong,preplaysong
if playsong==preplaysong: #同一首歌曲
if not mixer.music.get_busy():
mixer.music.load(playsong)
mixer.music.play(loops=-1)
else:
mixer.music.unpause()
msg.set("\n正在播放:{}".format(playsong))
else: # 更换歌曲
playNewmp3()
preplaysong=playsong def playNewmp3(): #播放新曲
global playsong
mixer.music.stop()
mixer.music.load(playsong)
mixer.music.play(loops=-1)
msg.set("\n正在播放:{}".format(playsong)) def stopmp3(): #停止播放
mixer.music.stop()
msg.set("\n停止播放") def exitmp3(): # 结束
mixer.music.stop()
win.destroy() ### 主程序从这里开始 ### import tkinter as tk
from pygame import mixer
import glob mixer.init()
win=tk.Tk()
win.geometry("640x380")
win.title("mp3 播放器") labeltitle = tk.Label(win, text="nmp3 播放器", fg="red",font=("新细明体",12))
labeltitle.pack() frame1 = tk.Frame(win) # mp3 歌曲容器
frame1.pack() source_dir = "F:\\pythonBase\\pythonex\\ch13\\mp3\\"
mp3files = glob.glob(source_dir+"*.mp3") playsong=preplaysong = ""
index = 0
volume=0.6
choice = tk.StringVar() for mp3 in mp3files: #建立歌曲菜单按钮
rbtem = tk.Radiobutton(frame1,text=mp3,variable=choice,value=mp3,command=choose)
if(index==0): #选择第1个按钮
rbtem.select()
playsong=preplaysong=mp3
rbtem.grid(row=index, column=0, sticky="w")
index += 1 msg = tk.StringVar()
msg.set("\n播放歌曲:")
label = tk.Label(win, textvariable=msg,fg="blue",font=("新细明体",10))
label.pack()
labelsep = tk.Label(win, text="\n")
labelsep.pack() frame2 = tk.Frame(win) # 按钮容器
frame2.pack()
button1 = tk.Button(frame2, text="播放", width=8,command=playmp3)
button1.grid(row=0, column=0, padx=5, pady=5)
button2 = tk.Button(frame2, text="暂停", width=8,command=pausemp3)
button2.grid(row=0, column=1, padx=5, pady=5)
button3 = tk.Button(frame2, text="音量调大", width=8,command=increase)
button3.grid(row=0, column=2, padx=5, pady=5)
button4 = tk.Button(frame2, text="音量调小", width=8,command=decrease)
button4.grid(row=0, column=3, padx=5, pady=5)
button5 = tk.Button(frame2, text="停止", width=8,command=stopmp3)
button5.grid(row=0, column=4, padx=5, pady=5)
button6 = tk.Button(frame2, text="结束", width=8,command=exitmp3)
button6.grid(row=0, column=5, padx=5, pady=5)
win.protocol("WM_DELETE_WINDOW", exitmp3)
win.mainloop()

运行打包有额外的文件的时候,记得要把那些额外的文件复制到对应这个.exe文件目录中,这样才能正常加载所需文件运行。

吴裕雄--天生自然python学习笔记:python 用pyInstaller模块打包文件的更多相关文章

  1. 吴裕雄--天生自然HADOOP学习笔记:hadoop集群实现PageRank算法实验报告

    实验课程名称:大数据处理技术 实验项目名称:hadoop集群实现PageRank算法 实验类型:综合性 实验日期:2018年 6 月4日-6月14日 学生姓名 吴裕雄 学号 15210120331 班 ...

  2. 吴裕雄--天生自然MySQL学习笔记:MySQL UPDATE 更新

    如果需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作. 语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法: UPDATE table ...

  3. 吴裕雄--天生自然MySQL学习笔记:MySQL 插入数据

    MySQL 表中使用 INSERT INTO SQL语句来插入数据. 可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 以下为向MySQL数据表插入数据通 ...

  4. 吴裕雄--天生自然MySQL学习笔记:MySQL简介

    MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用 ...

  5. 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子

    1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...

  6. 吴裕雄--天生自然HADOOP学习笔记:基本环境配置

    实验目的 学习安装Java 学习配置环境变量 学习设置免密码登陆的方法 掌握Linux环境下时间同步的配置 实验原理 1.Java的安装 java是大数据的黄金语言,这和java跨平台的特性是密不可分 ...

  7. 吴裕雄--天生自然HADOOP学习笔记:使用yum安装更新软件

    实验目的 了解yum的原理及配置 学习软件的更新与安装 学习源代码编译安装 实验原理 1.编译安装 前面我们讲到了安装软件的方式,因为linux是开放源码的,我们可以直接获得源码,自己编译安装.例如: ...

  8. 吴裕雄--天生自然HADOOP学习笔记:Shell工具使用

    实验目的 学习使用xshell工具连接Linux服务器 在连上的服务器中进入用户目录 熟悉简单的文件操作命令 实验原理 熟悉shell命令是熟悉使用linux环境进行开发的第一步,我们在linux的交 ...

  9. 吴裕雄--天生自然HTML学习笔记:HTML 布局

    网页布局对改善网站的外观非常重要. 请慎重设计您的网页布局. <!DOCTYPE html> <html> <head>  <meta charset=&qu ...

  10. 吴裕雄--天生自然MySQL学习笔记:MySQL 安装

    所有平台的 MySQL 下载地址为: MySQL 下载:https://dev.mysql.com/downloads/mysql/ 注意:安装过程我们需要通过开启管理员权限来安装,否则会由于权限不足 ...

随机推荐

  1. 新iPhone的高售价下,苹果供应商们是该笑还是该哭?

    自新 iPhone发布之日起,世界就从未停止讨论其售价,越来越多的人开始困惑:新 iPhone毫无创新亮点,有什么底气卖到12799RMB呢?整个地球都在期待苹果推出廉价版 iPhone,望眼欲穿地等 ...

  2. Java算法练习——两数之和

    题目链接 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利 ...

  3. java 的二分算法

    二分算法 就是在 一组 有序 数组中 通过中间值(数组中间的那个数字)的方法 找到 某个数的下标,如果大于中间值 ,则在中间值与最大值之间 的中间值再比较. public class two { // ...

  4. win10编译libpng

    libpng在windows的编译. ligpng的官网介绍如下: libpng is the official PNG reference library. It supports almost a ...

  5. js冒泡,阻止冒泡

    js 冒泡事件 阻止冒泡 window.onload = function () { var oDiv1 = document.getElementById('div1'); var oDiv2 = ...

  6. php对象:get_object_vars(), get_parent_class(),is_subclass_of(),interface_exists()

    get_object_vars():获得对象的属性,以关联数组形式返回 get_parent_class():获得对象的父类 is_subclass_of():判断对象是否某类(参数2)的子类实例出的 ...

  7. JaveSE--getResource

    System.out.println(ConfigUtils.class.getProtectionDomain().getCodeSource().getLocation().getPath()); ...

  8. mysql字符集配置&mysql中文乱码

    问题描述 这两天重置了下自己的电脑系统,一个ubuntu,另外一个当然就是windows. 不过在运行程序的时候发现,出现了很多的"????",也就是乱码字符.毫无疑问,这定然是m ...

  9. ICRA 2019最佳论文公布 李飞飞组的研究《Making Sense of Vision and Touch: Self-Supervised Learning of Multimodal Representations for Contact-Rich Tasks》获得了最佳论文

    机器人领域顶级会议 ICRA 2019 正在加拿大蒙特利尔举行(当地时间 5 月 20 日-24 日),刚刚大会公布了最佳论文奖项,来自斯坦福大学李飞飞组的研究<Making Sense of ...

  10. VCRedist_x86.exe Vcredist_x64.exe

    Update for Visual C++ 2013 and Visual C++ Redistributable Package https://support.microsoft.com/en-u ...