2022.8.14-python-第三方库备份清理、可视化打包及部分bug记录(auto-py-to-exe)

该文内容灵感来源于的《Flask Web开发:基于Python的Web应用开发实战(第2版)》的书中章节7.5处。
为方便后续快速查看在这里进行记录。

在python的项目应用中最好有一个requirements.txt文件,用于记录所有依赖包及其精确的版本号,这样在另一台计算机就可以快速的重新生成对应的虚拟环境。

一、关于第三方库备份

1.生成requirements文件(备份)

这个文件可由pip自动生成,使用命令如下:

pip freeze >requirements.txt

2.使用requirements文件(还原)

如果想创建这个虚拟环境的完整副本,先创建一个新的虚拟环境,然后在其中运行下述命令:

pip install -r requirements.txt

3.清除全部第三方库(归零)

当你需要将某一环境归零时,你可以运行下述命令:

pip uninstall -r requirements.txt -y

二、关于封装-auto-py-to-exe工具

1.auto-py-to-exe简介

auto-py-to-exe是一个用于python程序打包的图形化工具,这里仅介绍安装和使用时的注意事项,笔者在虚拟环境运行该工具时未成功,因此建议使用第三方库管理技巧直接在cmd原生环境中进行封装。(ps:本文使用的是2.11.0版本)

2. 安装auto-py-to-exe

pip install auto-py-to-exe==2.11.0

3. auto-py-to-exe部分选项介绍

  • Script Location:指定需要打包的python文件位置
  • Onefile:建议使用one File形式,打包完之后就是一个.exe文件
  • Console Window:表示打包程序运行时,是否出现控制台。

4.启动方式

cmd命令行中输入:auto-py-to-exe

三、打包过程中出现的问题

1.动态链接库——opencv-python库(版本4.6.0.66)的问题

场景描述:使用pyautogui库中pyautogui.locateCenterOnScreen(img)函数获取指定图片坐标时,打包发现有opencv和没有的速度差别比较大。随后看看源码:

  • 查看pyautogui(0.9.52)中__init__可知,第183行尝试导入pyscreeze库;
  • 查看pyscreeze(0.1.28)中__init__可知,第45行尝试导入cv2库(即opencv-python);
  • pyscreeze(0.1.28)的__init__中,第50行加入print,如下:
try:
    import cv2, numpy
    useOpenCV = True
    RUNNING_CV_2 = cv2.__version__[0] < '3'
except ImportError:
    useOpenCV = False
print("useOpenCV={}".format(useOpenCV))   # 新加的
  • 发现pycharm中运行时,useOpenCV=True,打包之后就是useOpenCV=False。
  • 基本确定就是这个问题了。

解决方案:把opencv-python的版本降一下就好了。

pip uninstall opencv-python
pip install opencv-python==4.5.5.64

后记:为何小标题上是动态链接库,因为打包的时候有这一句,useOpenCV=True,因此感觉可能是新版的opencv-python这里有一些问题吧。

30397 INFO: Looking for dynamic libraries
useOpenCV=True

关于pyinstaller的配置文件spec的说明,有两个文章还不错,记录到参考来源中。

参考来源:

[1]《Flask Web开发:基于Python的Web应用开发实战(第2版)》
[2] python 快速删除程序_如何快速一次性卸载所有python包(第三方库)呢——胖猫读历史
[3] 可视化Python打包exe,这个神器绝了!
[4] Pyinstaller的Spec文件用法——tangfreeze
[5] Python 中如何安全地进行编译和反编译?

你可能感兴趣的:(python)