python程序打包成exe文件

一、下载pyinstaller

在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

二、编写python脚本后打包

打包单个文件

1、编写python脚本,视频下载程序脚本(video_down.py)

# !/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()

2、 打包python文件实例


将编写的视频下载脚本保存在video_down.py中;
把它打包成exe需要在同一文件夹中打开命令行并输入:
pyinstaller -F ./video_down.py
回车后运行,如果一切顺利,文件夹中会多出一个后缀为spec的文件,以及两个名为dist和build的文件夹。
打开dist,可以找到video_down.exe,这就是生成的可执行文件。

3、pyinstaller的其他的选项

详细参数含义如下面的表格:

参数用法
-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

pip install auto-py-to-exe -i https://pypi.tuna.tsinghua.edu.cn/simple/

安装完成之后,在命令行输入 auto-py-to-exe 打开打包窗口。 

 

在窗口中主要有几个参数:

  1. Script Location:就是 python 脚本的路径
  2. Onefile (--onedir / --onefile):就是上面的 -D 和 -F 参数,生成单个 exe 文件或者生成一个文件夹
  3. Console Window (--console / --windowed):就是上面的 -w 和 -c 参数,表示在运行的时候是否出现命令行窗口
  4. ICON:就是 ico 图标的地址

设置完这几个参数之后,在下面的 Current Command 框就会显示 pyinstaller 命令。点击最后的按钮,生成 exe 文件。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值