风险函数梳理工具

news2024/12/27 13:39:23

风险函数梳理工具

在日常的软件开发工作中,代码的安全性和质量至关重要。然而,面对庞大的代码库,手动查找潜在的风险函数不仅耗时,而且容易出错。特别是在团队协作中,代码审查和重构工作往往占据了大量宝贵的时间,使得开发者们无法专注于更具创造性的任务。那么,有没有办法让我们用更少的时间完成这些繁琐的工作,从而有更多时间去“摸鱼”呢?
为此,我们开发了一款风险函数梳理工具,旨在帮助开发者快速定位并梳理代码中使用的不安全函数。这款工具的核心功能包括:

  • 自动化搜索:工具能够在指定的文件夹及子文件夹内自动搜索指定的不安全函数。
  • 智能识别:通过精确的正则表达式匹配,工具能够准确地识别函数定义,并记录下这些函数的详细信息,包括所在的文件、行号以及整个函数的范围。
  • 多线程处理:利用多线程技术加速搜索过程,显著提高了处理大量文件的速度。
  • 结果可视化:搜索结果将以易于阅读的表格形式展示,方便开发者一目了然地查看哪些地方使用了不安全的函数。
  • 灵活配置:支持自定义排除特定类型的文件(如文档、图片等),以减少不必要的搜索范围,提高效率。

1、使用说明

1.1 运行方式

自己运行代码,根据理解可以增加功能
  1. 在终端或命令提示符中执行以下命令来安装所有依赖项
pip install -r requirements.txt
  1. 导航到包含 app.py 文件的目录
  • 在终端或命令行界面中,运行以下命令来启动 Streamlit 应用
streamlit run app.py
  • 或者直接在pycharm中执行main.py文件
直接运行exe文件
  1. 在dist文件夹下存在main.exe文件:
  • 直接点击即可打开应用;
  • 建议在终端或命令行界面中,以main.exe运行(可以查看执行过程)

1.2 使用示例

  1. 执行程序
    在这里插入图片描述

  2. 选择风险函数梳理初级处理工具

  3. 选择待处理路径:可以输入多个绝对路径,用英文逗号分隔即可
    在这里插入图片描述

  4. 选择待搜索函数:可以输入多个函数名称,用英文逗号分隔即可
    在这里插入图片描述

  5. 选择要排除的文件后缀名:可以输入多个后缀名,用英文逗号分隔即可
    在这里插入图片描述

  6. 选择保存类型:

    • Excel:保存为xlsx文件
    • CSV:保存为csv文件
    • JSON:保存为json文件
  7. 点击开始处理按钮:

    • 执行完会显示下载文件:点击下载按钮可以直接下载到本地
    • 数据预览:显示前10行查询结果,并显示查询结果保存的位置

在这里插入图片描述

2、生成可执行文件

  • 其中输入的是Image.open(basic_uploaded_file)类型的图像,如果使用OpenCV进行处理注意转换,并且输出要转换回原来的类型
  • 利用pyinstaller打包streamlit移植到其他电脑上使用

2.1 生成已安装库文件

确保你的环境中已经安装了所有必要的库:
确保你在开发环境中安装了所有应用程序运行所需的库,包括 Streamlit 和任何其他第三方库。
通过 pip freeze > requirements.txt 命令生成一个包含所有已安装库及其版本号的文件。

2.2 安装pyinstaller

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

2.3 打包

打包 Python 应用程序
  • PyInstaller 会自动处理大多数依赖关系,并将它们打包到最终的可执行文件中。
  • –onefile 选项表示将所有依赖项合并到一个单一的可执行文件中;
  • –windowed 选项则表示生成的应用程序将在没有控制台窗口的情况下运行(仅适用于 Windows)。
pyinstaller --onefile --windowed main.py
pyinstaller打包streamlit预处理
  • PyInstaller 虽然会自动处理大多数依赖关系,但是streamlit库一般无法正确处理,可以使用下面的办法解决:
  1. 创建hook文件,放在hooks文件夹下(命名以hook开头)
from PyInstaller.utils.hooks import copy_metadata
 
datas = copy_metadata("streamlit")

在这里插入图片描述

  1. 在项目根目录下创建main.py
import os
import sys

import streamlit.web.cli as stcli


def resolve_path(path):
  resolved_path = os.path.abspath(os.path.join(os.getcwd(), path))
  print(resolved_path)
  return resolved_path


if __name__ == "__main__":
  sys.argv = [
    "streamlit",
    "run",
    # 填写streamlit启动页面(本文把启动文件app.py放在main.py同目录)
    resolve_path("app.py"),
    "--global.developmentMode=false",
  ]
  sys.exit(stcli.main())
进行第一次打包
  • --additional-hooks-dir=:指定一个目录,该目录中包含自定义的钩子文件(本文把钩子文件建立在hooks文件夹下)。这些钩子文件可以帮助 PyInstaller 更准确地处理某些库或模块。
  • 打包完成后会生成main.spec、dist、build文件
pyinstaller --onefile --additional-hooks-dir=./hooks main.py --clean
  • 第一次打包的执行文件可能依旧不会成功,因为我们没有指定streamlit库路径,我们可以在main.spec文件里进行编辑

    • datas=[('venv/lib/python3.8/site-packages','.')]:注意venv/lib/python3.8/site-packagesVirtualenv方式建立的python环境中安装包所在目录;如果你使用的是Conda创建环境,你需要找到所建环境的位置。

    • 找到某个库所建环境的位置:

      import os
      import streamlit
      import sys
      
      # 获取 streamlit 模块的文件位置
      streamlit_path = os.path.dirname(streamlit.__file__)
      print(f"Streamlit is located at: {streamlit_path}")
      
# -*- mode: python ; coding: utf-8 -*-

a = Analysis(
    ['main.py'],
    pathex=[],
    binaries=[],
    # 第一个参数:config:这是指定要包含的源文件的路径。在这个例子中,config 是一个配置文件所在文件夹,位于与 main.py 同级的目录下。
    # 第二个参数:'config':这是指定目标路径。在这里,'config' 表示当前目录的config文件夹。这意味着在打包后的 EXE 文件运行时,config应该被放置在 EXE 文件所在的目录下。
    # venv/lib/python3.8/site-packages':注意一定要填写你的streamlit安装位置的上级目录
    # 如果你的程序只有一个启动文件`gui.py`,没有配置文件夹或类似services文件夹,只需要datas=[('venv/lib/python3.8/site-packages','.')],
    datas=[('config','config'),('pages','pages'),('services','services'),('venv/lib/python3.8/site-packages','.')],
    hiddenimports=[],
    # 指定 Hook 文件所在的目录
    hookspath=['./hooks'],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='main',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)
进行第二次打包
  • 先将之前生成的dist和build文件删掉
pyinstaller main.spec --clean
# TODO 切记要在目标环境ji
D:\anaconda\install\envs\gongju\Scripts\pyinstaller.exe main.spec --clean
  • 注意:如果你的程序只有一个启动文件app.py,没有配置文件夹或类似services文件夹,那么到这里应该就可以正常运行;否则:
    • 类似services文件夹(存放函数)在打包配置main.spec里指定即可;
    • pages(存放streamlit页面)文件夹需要复制到生成的dist里
    • config配置文件夹建议复制到生成的dist里,因为这样配置改变时才会生效
    • 启动文件app.py复制到生成的dist里

在这里插入图片描述

优化内存
  • 此时虽然可以正常运行,但是打包后的执行文件很大,如何优化打包内存?
    • 编辑main.spec的 pathex 参数:该参数用于指定可执行文件运行时的路径列表。这个列表中的路径会被用来寻找与应用程序相关的文件。pathex 参数对最终可执行文件的大小有显著影响,因为它决定了哪些文件和目录会被包含在最终的打包结果中
    • 设置pathex=[‘.’]:当 pathex=[‘.’] 时,PyInstaller 会明确地告诉打包工具只在当前工作目录下查找所需的文件和依赖项。这样可以减少不必要的文件被包含进来,从而减小最终可执行文件的大小。

3、源码下载路径

风险函数梳理工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180664.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】---异构数据融合

文章目录 1. 引言2. 异构数据融合的概念3. 常用的异构数据融合技术3.1 早期融合(Early Fusion)3.2 晚期融合(Late Fusion)3.3 中期融合(Intermediate Fusion)3.4 递归融合(Recursive Fusion&…

JavaSE——进制转换、原码、反码、补码、位运算(左移、右移、取反)

目录 一、四种进制介绍 二、进制的转换 (一)二进制—>十进制 (二)八进制—>十进制 (三)十六进制—>十进制 (四)十进制—>二进制 (五)十进制—>八进制 (六)十进制—>十六进制 (七)二进制—>八进制 (八)二进制—>十六进制 (九)八进制—>二…

免费升级!Windows10 64位国庆特别版:包含最新安全补丁!

国庆佳节临近,系统之家小编给大家带来了Windows10 64位国庆特别版,该版本系统以最新Windows10 22H2专业版系统为基础,展开离线制作与优化,安全无毒,且运作更加流畅稳定,建议大家升级。Windows10 64位国庆特…

华为OD机试 - 三阶积幻方(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…

长沙惠科成功完成SAP S/4 1511到S/4 2021的无缝升级,实现“停机不停产”

关于HKC长沙惠科光电有限公司 长沙惠科光电有限公司于2019年9月20日落户于长沙市浏阳经济技术开发区,注册资本220亿元人民币,由惠科股份有限公司与湖南金阳投资集团、浏阳市城市建设集团有限公司共同出资,是惠科股份有限公司下属的第四家专业…

WebAssembly 为什么能提升性能,怎么使用它 ?

文章目录 简介:起源:前端性能提升历史JIT(Just-In-Time)编译器(即时编译) 为什么需要WebAssembly:WebAssembly能做什么:经常说WASM的性能高,为什么高??使用方法:Emscript…

《OpenCV 计算机视觉》—— 视频背景建模

还未写完!!! 完整代码如下: import cv2cap cv2.VideoCapture(test.avi)""" getstructuringElement(shape,ksize,anchorNone)得到一个卷积核。主要用于后续的腐蚀、膨胀、开、闭等运算。 参数:shape:设…

Redis进阶篇 - 缓存穿透、缓存击穿、缓存雪崩问题及其解决方案

文章目录 1 文章概述2 缓存穿透2.1 什么是缓存穿透?2.2 缓存穿透的解决方法2.2.1 做好参数校验2.2.2 缓存无效Key2.2.3 使用布隆过滤器2.2.4 接口限流 3 缓存击穿3.1 什么是缓存击穿?3.2 缓存击穿的解决方法3.2.1 调整热点数据过期时间3.2.2 热点数据预热…

docker环境下配置cerbot获取免费ssl证书并自动续期

文章目录 实践场景了解certbot查看nginx的映射情况操作目标配置nginx配置的ssl证书设置自动续签 实践场景 本人使用docker部署了一个nginx容器,通过容器卷,实现本地html,ssl,conf和ngiinx容器映射的, 经常需要手动部署…

WPS在表格中填写材料时,内容过多导致表格不换页,其余内容无法正常显示 以及 内容过多,导致表格换页——解决方法

一、现象 1,内容过多导致表格不换页,其余内容无法正常显示 2,内容过多,导致表格换页 二、解决方法 在表格内右击,选择表格属性 在菜单栏选择行,勾选允许跨页断行,点击确定即可 1&#xff0…

react+antdMobie实现消息通知页面样式

一、实现效果 二、代码 import React, { useEffect, useState } from react; import style from ./style/index.less; import { CapsuleTabs, Ellipsis, Empty, SearchBar, Tag } from antd-mobile; //消息通知页面 export default function Notification(props) {const [opti…

Kafka学习笔记(三)Kafka分区和副本机制、自定义分区、消费者指定分区

文章目录 前言7 分区和副本机制7.1 生产者分区写入策略7.1.1 轮询分区策略7.1.2 随机分区策略7.1.3 按key分区分配策略7.1.4 自定义分区策略7.1.4.1 实现Partitioner接口7.1.4.2 实现分区逻辑7.1.4.3 配置使用自定义分区器7.1.4.4 分区测试 7.2 消费者分区分配策略7.2.1 RangeA…

【MySQL】常见的SQL优化方式(二)

目录 1、limit 优化 (1)延迟关联(索引覆盖子查询) (2) 已知位置查询 2、group by 优化 (1)使用索引 (2)避免排序 (3)分析查询 …

LeetCode[中等] 739. 每日温度

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 思路 栈 暴力法为遍历列…

毕业论文不会写?教你如何利用AI来帮我完成初稿

AI是个工具,它能帮你提高效率,但可不能完全替代你的工作。所以,你要做的是学会如何利用AI来辅助你的毕业论文写作。 writehelp智能写作辅导:可节约1000小时写作时间帮助快速完成初稿的撰写。 传送门:http://www.write…

Qt Linguist手册-翻译员

翻译人员 Qt Linguist 是为 Qt 应用程序添加翻译的工具。一旦安装了 Qt,就可以像开发主机上的其他应用程序一样启动 Qt Linguist。 Qt Linguist 主窗口包含一个菜单栏和以下视图: 上下文 (F6) 用于从上下文列表中选择要翻译的字符串。字符串 (F7) 用于…

软考中级网络工程师下午题近五年笔记

刷题地址:软考达人—专业的软考刷题题库,软考历年真题,软考模拟考试,软考考前押题。柴丁科技 (ruankaodaren.com) 上面这个网站有的图不清晰,也可以看这个网站策未来网校——在线刷题、智能刷题 (ceweilai.cn) 2019…

[leetcode] 71. 简化路径

文章目录 题目描述解题方法栈java代码复杂度分析 题目描述 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 / 开头),请你将其转化为 更加简洁的规范路径。 在 Unix 风格的文件系统中规则如下&#xff1…

springboot+大数据+基于协同过滤算法的校园食堂订餐系统【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

25:stm32的低功耗模式

低功耗模式 1、PWR电源控制2、低功耗模式 1、PWR电源控制 PWR(Power Control)电源控制。PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能,这里我们只学习低功耗模式的功能,低功耗模式…