在python环境中安装pyinstaller模块,安装打包必备的工具pyinstaller
1、 安装pyinstaller
anaconda环境下安装运行:conda install pyinstaller
没有conda就在命令行中运行:pip install pyinstaller
最好的是每个需要打包的脚本建个虚拟环境,然后在虚拟环境中安装打包工具pyinstaller,这样打包的东西就不会很多。
anaconda环境下创建虚拟环境:
# 创建虚拟环境
conda create -n myenv python=3.6
# anaconda环境下进入虚拟环境安装包:
conda activate myenv
# 安装打包工具模块
conda install pyinstaller
windows环境下Python3.3 之前需要单独安装virtualenv 工具
# 安装virtualenv工具
pip install virtualenv
# 测试安装是否成功
virtualenv --version
# 创建虚拟环境
virtualenv env
# 进入虚拟环境
source my_project_env/bin/activate
# 退出虚拟环境
deactivate
windows环境下Python3.3 之后,可以用模块 venv 代替 virtualenv 工具,好处是不用单独安装,3.3 及之后的版本,都可以通过安装好的 Python 来创建虚拟环境:
#创建虚拟环境
python -m venv myvenv
#venv 有些参数,不过相比 virtualenv 少了些,这里简单介绍几个:
--without-pip: 不需要安装 pip,默认为安装
--clear:如果创建虚拟环境的目录已经有了其他虚拟环境,清除重建
#进入虚拟环境
source myvenv/bin/activate
#安装打包工具模块
pip install pyinstaller
# !/usr/bin/env python
# -*- coding: utf-8 -*-
import tkinter as tk
import subprocess #进程
import tkinter.filedialog
from tkinter.messagebox import showinfo
root = tk.Tk()
root.title('视频下载小软件')
root.geometry('400x200+200+200')
def download():
link = f'you-get -o {file_path.get()} {key_word.get()}'
print(link)
subprocess.run(link, shell=True)
showinfo(title = "提示",message = "下载完成!")
def clear():
e.delete(0, 'end')
path.delete(0, 'end')
def choose_file():
file_path = tk.filedialog.askdirectory(title="选择路径")
path.delete(0, 'end')
path.insert(0, file_path)
txt = tk.Label(text='请输入下载的网址:', font=80)
txt.grid(row=0, column=0)
#获取文本框Entry输入的信息,key_word.get()
key_word = tk.StringVar()
e = tk.Entry(root, textvariable=key_word)
e.grid(row=0, column=1)
txt1 = tk.Label(text='请选择下载的路径:', font=80)
txt1.grid(row=1, column=0)
file_path = tk.StringVar()
path = tk.Entry(root, textvariable=file_path)
path.grid(row=1, column=1)
#选择文件控件
sumbit_btn = tk.Button(root,text="选择路径",command = choose_file)
sumbit_btn.grid(row=1, column=2)
bt = tk.Button(text='下载', command=download, width=10)
bt.grid(row=2, column=1)
bt = tk.Button(text='清空', command=clear, width=10)
bt.grid(row=2, column=2)
root.mainloop()
将编写的视频下载脚本保存在video_down.py中;
把它打包成exe需要在同一文件夹中打开命令行并输入:
pyinstaller -F ./video_down.py
回车后运行,如果一切顺利,文件夹中会多出一个后缀为spec的文件,以及两个名为dist和build的文件夹。
打开dist,可以找到video_down.exe,这就是生成的可执行文件。
详细参数含义如下面的表格:
参数 | 用法 |
---|---|
-F | 生成结果是一个 exe 文件,所有的第三方依赖、资源和代码均被打包进该 exe 内 |
-D | 生成结果是一个目录,各种第三方依赖、资源和 exe 同时存储在该目录(默认) |
-a | 不包含unicode支持 |
-d | 执行生成的 exe 时,会输出一些log,有助于查错 |
-w | 不显示命令行窗口 |
-c | 显示命令行窗口(默认) |
-p | 指定额外的 import 路径,类似于使用 python path |
-i | 指定图标 |
-v | 显示版本号 |
-n | 生成的 .exe 的文件名 |
pyinstaller -F -w -i python.ico video_down.py 就表示 -F,打包只生成一个 exe 文件,-w,在运行程序的时候不打打开命令行的窗口,-i 就是打包带有自己设置的 ico 图标。
1、将需要打包的项目为anjuke_sd目录下的所有python文件,其中excute_main.py为主文件。
2、生成主函数对应的spec文件
命令:在anjuke_sd路径下使用:pyi-makespec excute_main.py
3、修改spec文件:加入需要打包的所有python文件,同时确保以下两项包含该项目的路径
4、对spec文件进行打包安装
命令:pyinstaller excute_main.spec
此时项目下多了两个目录,进入dist目录,找到dist路径下后缀名为exe的文件。这里为dist下目录excute_main下的excute_main.exe
注意事项:
(1)为了使exe程序不闪退,需要在脚本最后加入os.system("pause")语句
(2)为了考虑发生异常时候,exe也不闪退,需要加入try..except...finally异常处理
(3)脚本可以引入其他文件的变量,函数
有些人可能感觉命令行打包还需要记忆各种参数的含义,有没有窗口化的打包方式,还别说,真有。auto-py-to-exe 一个将 pyinstaller 封装成为 GUI 窗口的模块。
1 |
|
安装完成之后,在命令行输入 auto
-
py
-
to
-
exe
打开打包窗口。
在窗口中主要有几个参数:
设置完这几个参数之后,在下面的 Current Command 框就会显示 pyinstaller 命令。点击最后的按钮,生成 exe 文件。