大家好,我是丁小杰

相信大家都试过将Python文件进行打包,来发给其他没有安装Python环境的用户使用,但通常情况下,打包生成的exe文件都很大,而产生这种情况的原因就是,打包并不会只打包我们所使用的一些库,在我们日常使用的环境中,可能会有很多没有用的关联库被一起打包。这时,创建一个虚拟环境就是最好的选择,然后在虚拟环境中进行打包。

安装pipnev

pipenv 用来管理虚拟环境,先安装一下 pipenv

pip install pipenv

使用 pip show pipenv 检查是否安装成功。

前期准备

创建一个文件夹,来保存虚拟环境相关文件,并cd进入该文件夹下。

创建虚拟环境
pipenv install
进入虚拟环境
pipenv shell
安装项目用到的库
pip install pandas

如果数量比较多的话,可以新建一个requirements.txt文件来保存需要的库名,一起下载。

python virtualenv 依赖 backbone python virtualenv打包_可执行文件


再在虚拟环境中运行下面代码,记得修改requirements.txt文件路径,这里添加了阿里镜像速度要快些。

pip install -r D:\requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
在虚拟环境中安装pyinstaller

这一步至关重要,如果没有在虚拟环境中安装pyinstaller的直接打包的话,会使用默认python环境的pyinstaller进行打包,那么,恭喜你前面都白做了。

pip install pyinstaller
使用pyinstaller打包

pyinstaller打包有不少可选参数,可以根据自己的需要进行添加。

-F:打包单个文件,产生一个文件用于部署(默认),如果代码都写在一个 .py 文件时使用,项目有多个文件时不要使用

pyinstaller -F xxx.py

-D:打包多个文件,产生一个目录用于部署(默认),用于框架编写的代码打包

pyinstaller -D xxx.py(项目入口文件)

–key=keys:使用 keys 进行加密打包

pyinstaller --key=123456 -F xxx.py

-d:产生 debug 版本的可执行文件

-p:用来添加程序所用到的包的所在位置,设置导入路径,可以用 ; ( Linux 使用 :)分割来指定多个目录。

-w:表示不用控制台窗口,使用 Windows 子系统执行,当程序启动的时候不会打开命令行(只对 Windows 有效)

-c:表示打开控制台窗口,使用控制台子系统执行,当程序启动的时候会打开命令行(默认)(只对 Windows 有效)

-i:将 file.ico 添加为可执行文件的资源,改变程序的图标(只对 Windows 系统有效)

下面是我打包时用的代码。

  • ./1.ico:exe文件图标路径
  • ./test.py:代码路径
pyinstaller -F -w -i ./1.ico ./test.py

运行完之后,可执行文件在dist文件夹下。

下面是两种情况下打包的对比,可以看到在虚拟环境中打包生成的可执行文件要小很多。

python virtualenv 依赖 backbone python virtualenv打包_Python_02

当然我们虚拟环境用完了之后,如果想要删除虚拟环境,可以

pipenv --rm                    删除虚拟环境

这里再给出一些pipenv的常用操作

pipenv --where                 列出本地工程路径
pipenv --venv                  列出虚拟环境路径
pipenv --py                    列出虚拟环境的Python可执行文件
pipenv install                 创建虚拟环境
pipenv isntall [moduel]        安装包
pipenv install [moduel] --dev  安装包到开发环境
pipenv uninstall [module]       卸载包
pipenv uninstall --all         卸载所有包
pipenv graph                   查看包依赖
pipenv lock                    生成lockfile
pipenv run python [pyfile]     运行py文件

这就是今天文章的主要内容了,建议大家收藏备用,像这种工具之后肯定是要用到的。


对于刚入门 Python 或是想要入门 Python 的朋友,可以通过关注公众号“Python新视野”,一起交流学习,都是从新手走过来的,有时候一个简单的问题卡很久,但可能别人的一点拨就会恍然大悟,由衷的希望大家能够共同进步。