最近写了一个python爬虫小项目,想打包成一个exe文件,放在其他电脑上使用。但是没想到一个20B的py文件打包过程却十分艰辛。先后经历了打包失败无法运行,打包成功但是运行十分缓慢,打包了一大堆不需要的包,导致打包文件达到了500MB等。最后终于通过了一系列面向CSDN的编程,将最后的打包文件缩减到90MB,也算是有些收获。

整个打包流程比较长,因为从环境配置开始就得做准备,这样才能确保最后打包出来的文件只包含我们需要的库,而不需要其他冗余的。

一、安装配置虚拟环境virtualenv

之前我所有的Python项目,都是在Anaconda环境下完成的,这个环境的好处是方便第三方包的管理,大部分情况是没有坏处的。然而,一旦我们想把python项目打包,问题就凸显出来了。由于在进行Pyinstaller打包时,会将环境里所有的package一起打进去,这就导致了非常多曾经下载过的,但是在这个项目中没用到的package,也会成为程序的一部分,大大增加了整个文件的大小。例如说,我这个项目其实并没有用到pandas和numpy,但是这两个项目却占了我两百多MB的资源,非常不值得。

我也曾经根据某些解决方案的建议,尝试在Pyinstaller时,加上一句–exclude pandas,但结果就是我整个程序就运行不了了。尝试了一圈,发现只有重新配置一个虚拟环境才能彻底解决问题。

配置虚拟环境的原因和方法可以参考以下资料:

https://blog.csdn.net/pdcfighting/article/details/104075212

我直接把流程贴出来就好。

  1. 打开windows命令行,以下所有步骤都是在命令行进行!
  2. 检查是否把python配置到了环境中了,可以用下面的方法检查
python --version
  1. 如果显示错误,或者根本没反应,那就说明你本身的环境变量没有把python.exe配置进去,配置的大概率是anaconda的,而不是python本身的。你只要找到原本python文件夹中的路径,添加到环境变量中,就可以了。
  2. 再试试以下能否使用pip或者pip3,方法同样是用
pip --version
  1. 如果失败,则把python文件夹下\Scripts也添加到环境变量中就可以了。
  2. 安装python虚拟环境virtualenv,安装完以后可以根据提示决定要不要upgrade以下
pip install virtualenv
  1. 随便一个地方新建一个文件夹, 用来存放虚拟环境的。比如我就在I盘新建了一个virtualenv文件夹。然后命令行cd到这个文件夹下。
cd I:
cd virtualenv
  1. 执行命令,新建环境,可以命名为你的项目名称。在原文中,作者让我再最后加上一句–no-site-packages,但是我在执行后却出错了。后来查一下,发现virtualenv在20版本以后就已经默认是–no-site-packages,不再需要另外加,另外加会报错。
virtualenv grabstock
  1. 这时候如果你去看你的I盘,会发现在virtualenv文件夹下多了一个grabstock文件夹,里面还有一些类似python的文件包和文件夹,这就是一个十分初始的python环境了。这个时候,我们需要激活这个虚拟环境,方法是进到Scripts再执行activate。
cd grabstock\Scripts
activate
  1. 激活以后,会发现命令行的最前面已经变成了你的项目名称。此时你可以输入pip list,检查已有的包。通常来说,新的python环境只会有pip, setuptools和wheel3个包。你可以选择在这里就把你之后项目会用到的包安装进去,当然,也可以在实际操作中再在pycharm里安装也行。怎么开心怎么来。
    虚拟环境已经被激活,我们最后可以通过deactivate命令退出虚拟环境,完成命令行部分的操作。

二、从Pycharm新建项目,并使用虚拟环境

新建项目,注意一下地方需要修改

Base Interpreter要记得换成自己虚拟环境中的那个python.exe。

点击创建,之后的事情就跟你平时用Pycharm一样了,没啥特别的。

在我的项目中,引用了PyQt5, bs4,googletrans和zhconv(简繁体转换)四个包,本身就有了170MB的大小。

三、Pyinstaller打包文件

首先,在Setting→Project Intepreter里安装pyinstaller。
安装完成后,在项目那边右键,选择Open in Terminal
在命令行输入以下指令,先打包成一个单文件。文件会放在源目录/dist文件夹。

其中-F是打包成单文件的意思。如果你项目本身较小,是可以考虑使用这个指令。但是如果你引用了较多的第三方包,建议你跟我一样,不要这个-F,直接打包成一个含有完整链接的文件夹。
另外Main.py是我的主程序,我其实还另外写了几个Py文件,从主程序中引用。这里不需要特别把其他程序都一起打包的,只需要打包主文件就行。

我第一次做到这里时,就遇到了一个小问题。因为我用到了zhconv这个第三方包,它其实引用了自带的一个json库。然而在打包的时候,并没有把这个json一起打包进去,因此提示报错:


这里的解决方案也查阅了好久才发现的,具体可见:
https://blog.csdn.net/qq_18453581/article/details/90314701
简单来说,就是在源目录下,新建resource文件夹,将zhconv中的zhcdict.json放入该文件夹中。同时,在pyinstaller时,使用下列代码,将resource加到打包项目中,就可以了。

pyinstaller Main.py --add-data="resource;."

另外,我在一开始打包完成后,执行程序时一旦出错,会直接关闭主页面,不会跳出任何提示。这里的解决方案是,打开windows命令行,将你要执行的exe文件直接拖到命令行窗口中,此时会显示如下状态。直接按回车,就能在命令行下执行文件,就算出错,也能查看到报错内容。


如此一来,就完成了整个项目的打包。通常来说,使用文件夹形式的打包,比单文件打开快得多。但是有时候,我们就想使用单文件来执行,又想保证运行速度,那就需要用到enigma virtual box打包了。

四、使用Enigma Virtual Box打包文件夹

这个解决方案是参考下文连接的。
https://blog.csdn.net/qq_25921925/article/details/103949384

简单步骤如下:
1.去官网下载Enigma
https://enigmaprotector.com/en/downloads.html
2. 安装完成后,打开窗口,并进行以下操作
3. Enter Input File Name要选择你打包文件夹中的那个exe文件。Enter Output File Name可以随意选择你想存放的地点
4. 在下方file处点击Add,并选择Add Folder Recursive,接着选择dist文件夹下你的打包后项目文件夹。
5. 点击%DEFAULT FOLDER%左边的加号,找到执行文件main.exe,选择Remove,把它移除。
6. 点击Process

以上就是打包python项目的全流程。

pyinstaller精简打包python项目完整流程,含常见问题解决方案相关推荐

  1. 使用pyinstaller打包python_使用pyinstaller打包Python项目,python

    00 前言 上一篇文章写的是使用百度aip实现一个图片转文字的小工具( https://blog.csdn.net/George_Clancy/article/details/105551872 ), ...

  2. 基于Pyinstaller库将Python项目包括 图片打包exe方法,本人已经实践多次

    基于Pyinstaller库将Python项目包括 图片打包exe方法,本人已经实践多次 文章目录 基于Pyinstaller库将Python项目包括 图片打包exe方法,本人已经实践多次 一.前言 ...

  3. 企业开发项目完整流程

    企业开发项目完整流程 文章目录 企业开发项目完整流程 1.需求分析 2.设计(概要设计.详细设计) 3.技术选型(对于新项目很重要) 4.初始化/引入需要的技术/组件/框架 5.写demo 6.写代码 ...

  4. 2021-01-22 使用 Docker 打包 Python 项目

    使用 Docker 打包 Python 项目 1. 获取 Python 的镜像文件 项目的封装可以建立在已有镜像的基础上,在 Ubuntu 中可通过 docker pull python:3.6.8- ...

  5. vue = 什么意思_记录使用@vue/cli搭建Vue3项目完整流程

    最近发现vue两大UI框架Element UI和Ant Design Vue都已经支持Vue3了,如果再不学习Vue3就落伍了,此文章记录下使用@vue/cli搭建Vue3项目完整流程. 1 安装vu ...

  6. python setup.py build_打包Python项目为rpm时遇到python setup.py build报错的问题

    问题描述 使用rpmbuild打包python项目,执行报错 rpmbuild -bb autoinstall.spec hrwxr-xr-x XXX/XXX     0 2018-12-19 13: ...

  7. cli vue 卸载_记录使用@vue/cli搭建Vue3项目完整流程

    最近发现vue两大UI框架Element UI和Ant Design Vue都已经支持Vue3了,如果再不学习Vue3就落伍了,此文章记录下使用@vue/cli搭建Vue3项目完整流程. 1 安装vu ...

  8. 【新】使用setuptools打包Python项目

    如何使用setuptools打包Python项目 如何使用setuptools打包Python项目 一.准备 二.项目结构 三.简单打包 3.1 文件内容 3.2 打包项目 3.3 安装测试 四.自定 ...

  9. docker打包Python项目

    docker打包Python项目 Step1: 配置运行环境文档 项目结构如下 docker_test ├── Dockerfile ├── (myapps) │ └── BPNN.py └── re ...

最新文章

  1. React Native开发之必备React基础
  2. 不断提升自己创造溢价的能力
  3. mysql查看连接数
  4. 数据库里账号的密码,这样存放最安全!
  5. 浅谈 URI 及其转义
  6. Inno_Setup使用笔记(简单完成安装包制作)
  7. h5c3 part6 flex
  8. Java Enterprise软件与应有的内容
  9. 【计算机组成原理】CPU
  10. 一觉醒来,没有购房资格了!
  11. 记录——《C Primer Plus (第五版)》第十章编程练习第二题
  12. 和显卡驱动要配套吗_显卡有必要更新驱动程序吗?老玩家的建议请收好
  13. C++轻量级微服务_『高级篇』docker容器来说什么是微服务(三)
  14. java中reg=new,JavaScript replace new RegExp使用介绍
  15. CVS常用命令速查手册
  16. 好用的在线JSON编辑与格式化工具
  17. 台达变频器485通讯接线图_台达PLC与变频器用485通讯怎样实现启动、停止和频率给定,程序怎样做。谢谢!...
  18. 麻瓜python视频教程_Python基础教程|麻瓜编程Python Web开发工程师教程完整版_ - 极光下载站...
  19. 基于STM32F407的ESP8266WIFI模块联控
  20. 锐文网络安全网闸卡各种应用场景

热门文章

  1. STM32 HAL库
  2. 海康摄像机/录像机rtsp视频流地址格式
  3. 联邦学习入门(一)-Advances and Open Problems in Federated Learning详解
  4. 《豪杰春香》and《萤火之森》
  5. 快速提高编程能力——一年时间可以改变很多事
  6. You can't specify target table 'dt_task_apply' for update in FROM clause sql 关联查询 并删除
  7. 西门子200PID温度控制程序实例以太网控制变频器调速只卖源程序
  8. Unity 自动化1.0(代码,预制体生成到指定模块)
  9. Tensorflow之负采样函数Sampled softmax loss
  10. unity bug(Copying assembly from ‘Temp/Assembly-CSharp.dll‘ to ‘Library/ScriptAssemblies/Assembly-CSh