使用pyinstaller打包Python程序

背景

当写好python文件后,会希望可以打包成可执行文件,这样对方不需要下载python,双击就可以执行,简单方便。

为了满足这种需求,python提供了pyinstaller包。该包可以将python代码和所依赖的环境打包为二进制可执行文件。

下面我们一起来看下如何使用pyinstaller打包~

操作步骤

使用anaconda创建虚拟环境

为什么要创建虚拟环境呢?

一般python中会import第三方依赖包执行程序,所以打包的时候也需要将依赖的第三方包一起打包,这样用户才可以简单地双击运行程序。

pyinstaller进行打包时会打包当前python环境下所有包,所以为了缩减打包后的安装包体积,我们新建虚拟环境,在该虚拟环境中只安装用到的依赖包,避免无用的安装包增大体积。

明白了原理后,我们来进行环境的创建。

# 创建3.8 版本的python环境
conda create -n 你的虚拟环境名称 python=3.8

安装所需依赖包(必须安装pyinstaller包,其他自己需要的包自行安装即可)

pip install pyinstaller

激活虚拟环境

conda activate 刚刚创建的虚拟环境名称

使用pyinstaller打包

cd到要打包的文件夹下,执行如下命令进行打包:

# -F 表示统一打包成一个可执行文件,必须; -c 表示创建执行窗口,显示日志等,可选; 
# --clean 表示删除上次打包的缓存,可选;bot.py 是程序的入口文件
pyinstaller -F -c --clean bot.py

打包好后,会在dist文件夹下出现一个可执行打包文件。
在这里插入图片描述

代码路径问题

如果在程序中读取了某文件,假设代码中文件路径是./config.txt,表明程序会读取当前文件路径下config.txt文件,在双击运行时,一定要确认可执行文件的同级目录下存在config.txt文件。

否则程序会闪退,看不到报错,其实是因为找不到文件而异常退出了。

程序相对路径

这里再补充一下路径问题:

程序中经常会使用相对路径,那么这个路径是相对谁来说呢?

运行时会有一个当前路径变量,如果使用命令行运行,那么这么当前路径变量就等于命令行所在路径。而双击时,当前路径变量就等于可执行文件所在的路径。

举例,现在有文件夹a文件夹b文件夹a中,可执行文件demo.exe文件夹b中,文件夹a下还有配置文件config.txt。假设可执行文件在代码中读取了./config.txt文件。

如果终端当前路径在文件夹b下,执行命令demo.exe运行文件夹b下的可执行文件demo.exe,最终程序会报错找不到配置文件,这是因为当前路径变量是文件夹b文件夹b并不存在配置文件config.txt

参考文献

参考文献1
参考文献2

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值