迁移必要依赖到虚拟环境下将Python程序打包成exe文件(Virtualenv+Pyinstaller+Pipreqs)

本文介绍了如何使用Python的第三方库PyInstaller、pipreqs和virtualenv将Python程序打包成.exe文件,特别强调了在虚拟环境中进行打包以减小程序体积。首先,通过pipreqs导出项目依赖,然后在虚拟环境中安装必需的库,最后使用PyInstaller进行打包。文章还列举了打包过程中可能遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


0 前言

  与C/C#等编译型语言不同(编译后直接生成可执行程序文件(后缀名为.exe)),Python作为解译型语言(不自动生成.exe),程序的运行必须有Python环境;而在缺少python环境的计算机上执行python程序,则需将其打包成.exe文件。打包方法及相关第三方库比较多,这里整理了4种Python打包.exe文件方法,本文选用Pyinstaller(较为常用且支持Linux,Unix等平台)对py文件进行打包。
  如果直接采用一般情况(这里指非虚拟环境)打包,则将该环境下全部第三方库(无论是否在被打包文件中使用)都打包到程序文件中,会造成一定的资源浪费,进而通过搭建虚拟环境,在该环境中只保留被打包文件所依赖的第三方库可以有效减少exe占用空间。相关的第三方库依然有很多种,例如标准库venv,这里选用一种比较简单方便的构建虚拟环境的第三方库virtualenv,当然还有一些追求打包文件极致的“小”的办法可以参考该文
  如上所述,我们可以将相关第三方库直接安装到虚拟环境中,但这样做并不方便;通常情况下,我们将程序相关依赖迁移到虚拟环境中进行打包,这里用到pipreqs库。本文主要分为三部分,第一部分:简单介绍如上提到的三种第三方库的安装及简单使用,第二部分:完整展示单个py文件打包成exe文件的具体流程,第三部分:记录打包时可能遇到的问题以及解决办法


  这里主要简单介绍相关库的简单办法以求优先理解“如何将必要依赖迁移至虚拟环境打包”这一问题,后面会补充相关库更详细的使用方法介绍

1 相关第三方库的安装及使用介绍

  这一步可以在非虚拟环境下直接安装pipreqs和virtualenv,在激活后的虚拟环境下安装pyinstaller。

1.1 pipreqs

一、安装

pip install pipreqs

二、相关命令简介

#导出项目依赖包
pipreqs . --encoding=utf8 --force
# “.” 指的是将导出依赖包的文件放在当前目录下
# “--encoding=utf8” 指的是存放文件的编码为utf-8,否则会报错
# “--force” --force 强制执行,当生成目录下的requirements.txt存在时强子覆盖
#导入项目依赖包
pip install -r requirements.txt

1.2 virtualenv

一、安装

pip install virtualenv

二、相关命令简介

#创建虚拟化环境 
virtualenv ENV #在当前的项目中创建ENV文件夹,为当前项目的虚拟python运行环境
#激活虚拟化环境 
source ENV/bin/activate

1.3 pyinstaller

一、安装(再次强调:在虚拟环境下安装即可,建议看完先第二节再操作)

虚拟环境中一定要有该库,新的环境里面一定一定要 pip install Pyinstaller

pip install pyinstaller

二、相关命令简介

pyinstaller -F Program_Name.py #最简单的用法,可以参照下表选择所需格式
-h,–help查看该模块的帮助信息
-F,-onefile产生单个的可执行文件
-D,–onedir产生一个目录(包含多个文件)作为可执行程序
-a,–ascii不包含 Unicode 字符集支持
-d,–debug产生 debug 版本的可执行文件
-w,–windowed,–noconsolc指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c,–nowindowed,–console指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR,–out=DIR指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,–path=DIR设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME,–name=NAME指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字

2 打包步骤(实例演示)

2.1 准备工作

  这里需要准备一个临时文件夹(我的目录是C:\Users\Ryan\Desktop\TEST),准备好自己编写好的python程序(我的是PODD.py)放到TEST文件夹中。

2.2 cd命令介绍(小白专用)

  cd(Change Directory)命令行是计算机操作系统中最重要也是最常用的命令,它可以帮助我们轻松地管理文件。首先按住"Win"+"R"键,输入cmd进入到dos界面,下面列举几个经常用到的命令。

#cd 进入到C盘目录下
cd C:\Users\Ryan\Desktop\TEST
#cd 进入到其它盘目录下
cd q:
cd Q:\stable-diffusion-webui-master

cd命令行返回
  当然,你也可以先在文件管理器中找到相应位置,在目录处输出“cmd”点击“Enter”键达到相同效果。
在这里插入图片描述

2.3 导出项目依赖包

首先在python程序中添加pipreqs库的引用,不添加可能会报错

import pipreqs

利用cd命令进入到python项目存放路径

cd C:\Users\Ryan\Desktop\TEST

在该目录下执行

pipreqs . --encoding=utf8 --force

在这里插入图片描述

  由此,我们可以在项目TEST文件夹中得到一个requirements.txt文件,文件内容包含了相关依赖的库名以及对应的版本号。
在这里插入图片描述

2.4 创建虚拟环境

返回TEST文件夹,创建虚拟化Python环境,取名为ENV(自己喜欢啥就叫啥)
在这里插入图片描述
打开TEST文件夹,可以发现多了一个名为ENV的文件夹,打开后可以看到有如下文件。更多
在这里插入图片描述

2.5 激活虚拟环境

将文件目录改为虚拟环境下的Scripts文件夹下

cd C:\Users\Ryan\Desktop\TEST\ENV\Scripts

直接输入

activate

见到(ENV)表示已成功激活虚拟化环境
在这里插入图片描述

2.6 导入项目依赖包

将2.3中导出的requirements.txt文件移动到…\TEST\ENV\Scripts\目录下

pip install -r requirements.txt

在这里插入图片描述

2.7 项目打包

在虚拟环境下改变目录到python程序目录

cd C:\Users\Ryan\Desktop\TEST

这个时候安装pyinstaller可以将该库仅安装在虚拟环境下

pip install pyinstaller

在这里插入图片描述
  现在,就可以根据1.3中相关命令进行打包了,比如我这里将python程序(PODD.py)打包成为一个可执行程序(包含多个文件)的目录。这里选用了最简单的打包方法,通常情况采用先生成spec文件,再对spec文件打包

pyinstaller -D PODD.py

INFO信息提示completed successfully表示打包完成
在这里插入图片描述
同时在TEST目录下生成build、dist和.spec三个文件(夹)
在这里插入图片描述

2.8 运行程序&删除多余文件

修改当前目录到可执行程序所在位置

cd C:\Users\Ryan\Desktop\TEST\dist\PODD

运行程序

PODD.exe

在这里插入图片描述

运行程序确认无误后我们可以将冗余的文件删除掉(除PODD文件夹外的所有文件)
在这里插入图片描述

3 可能出现的问题

3.1 参数设置有误造成的打包错误

错误描述:
在这里插入图片描述
解决办法:
  仔细核查pyinstaller参数命令的大小写、字母等情况。

3.2 窗体控件绑定的相关文件导致出错

错误描述:
在这里插入图片描述
解决办法:
  我这里的源码中用到了“FileOpen.png”这个图片作为按钮的图标,程序设置的图标读取应该为和python程序根目录下,故将该相关图片放到dist\POOD路径下即可解决该错误。

self.photo1=tk.PhotoImage(file=r"FileOpen.png")#示例化图标
self.Btn_Directory1=tk.Button(self.form1,
                              image=self.photo1,
                              text="浏览目录",
                              #compound=tk.LEFT,
                              command=self.SLCdir)#在窗体中添加按钮控件

在这里插入图片描述

3.3 其它问题

这一部分今后使用中会不断补充,先附上其它博主遇到的问题,感兴趣的可以了解下:链接1链接2


               赶紧点赞、收藏起来吧!不然下次就找不到了💕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测不绘的返工小渠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值