文章目录
- 背景
- 操作步骤
- 使用anaconda创建虚拟环境
- 使用`pyinstaller`打包
- 代码路径问题
- 程序相对路径
- 参考文献
背景
当写好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