纯Python(3.6及以上)虚拟环境使用pyinstaller打包

项目场景:

Python脚本可以被打包成exe可执行文件,文件包含了所有脚本运行需要的模块,库和解释器,和操作系统兼容的情况下不需要任何环境可以直接双击文件运行。

我用python写了一个带UI的简易画图工具,希望打包后在没有装编程软件的电脑上也能运行。

注意:Mac和Windows下生成的的可执行软件只能在各自的操作系统上运行,且无法转译,可以尝试使用虚拟机,但最稳妥的办法还是根据面向用户的操作系统来决定在什么系统下打包文件。比如我在Mac上写脚本,但是打包后面向用户使用的都是Windows,那么我就最好直接在Windows上打包

问题描述:

使用pyinstaller打包完后的可执行文件有300多M,远超微信和一般邮件的文件大小上限,而且压缩几乎没有效果,上传,发送,和下载都很耗时。

原因分析:

在网上搜索了一下原因,了解到电脑如果装了Anaconda(一个python集成开发环境),打包的时候就会包含代码里关联到的Anaconda很多不必要的库,因而导致可执行文件的大小大幅上升。

解决方案:

这篇文章只提供创建虚拟环境和打包的方法,不包含打包后文件运行所产生的的报错解决方案。 网上有很多缩小打包文件大小的方法可供参考,核心需求都是一个纯python的打包环境,只打包需要的东西。

因为需要保留Anaconda而且完全卸载比较麻烦,我选择使用python virtual environment虚拟环境,创造虚拟环境建议参考下方的官方文档。我会走一遍过程同时提出一些需要注意的细节。

创建python虚拟环境官方文档

1)创建虚拟环境

官方文档提供的方法是(如果没有venv包需要先安装):

python3 -m venv tutorial-env

但装由于系统会默认切换至Anaconda的路径,这样创建的虚拟环境仍会保留Anaconda的库,不是一个纯python环境。直接输入python3可以检查,如下反回了Anaconda:

Python 3.8.3 (default, Jul  2 2020, 11:26:31) 
[Clang 10.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.

为了获取纯python环境,应使用官网下载的而不是Anaconda的python,所以系统命令行首先输入本地当前纯python的版本,建议直接查看文件属性。

比如,我用的是3.7,我想确认使用的是官网下载的而不是Anaconda环境下的python,终端输入:

python3.7 

这里就没有返回Anaconda:

Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 26 2018, 23:26:24) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

确认是纯python后,终端输入(代码Win/Mac都适用):

python3.x -m venv 路径名称

venv后面是指定路径,最省事的方法是在桌面新建一个文件夹,然后将其拖入命令行/终端会自动显示路径。

2)启动虚拟环境:

Windows:

路径名\Scripts\activate.bat

Unix/MacOS:

source 路径名/bin/activate

3)安装所需库:

启动虚拟环境后,由于环境只包含python标准库,需要手动下载需要用到的库。欲查看已安装的库,输入:

pip freeze

安装指令:

pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple

xxx代表库的名称,比如绘图包matplotlib。从 -i 开始是清华的镜像服务器链接,可以忽略,但因为大部分文件源在国外的服务器上,加上可以提升下载速度。安装特定的版本:

pip install matplotlib==3.0.3

安装完库后,还需要安装打包工具,比较常见的一个叫pyinstaller:

pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

4)打包

安装好后就可以开始打包了:

pyinstaller command xxx.py

command是pyinstaller的打包指令,最常见的有几个:

  1. -D 打包成一个带各种运行所需文件的文件夹,其中包括可执行文件
  2. -F 打包成一个独立的可执行文件
  3. -w 打包完后运行可执行文件不会弹出命令行窗口

我选择的是 -F 和 -w ,具体指令请参考官方文档:
pyinstaller使用指令

5)结果:

Anaconada环境下直接打包生成文件大小为330M,纯python虚拟环境下为60M,双击成功运行。

文件变小了,但启动依然较慢。对文章有任何建议和疑问,或者了解能够提升启动速度的方法的朋友,欢迎在下方留言。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值