风险函数梳理工具

风险函数梳理工具

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

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

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_metadatadatas = copy_metadata("streamlit")

在这里插入图片描述

  1. 在项目根目录下创建main.py
import os
import sysimport streamlit.web.cli as stclidef resolve_path(path):resolved_path = os.path.abspath(os.path.join(os.getcwd(), path))print(resolved_path)return resolved_pathif __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.xdnf.cn/news/1551682.html

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

相关文章

心理咨询预约管理系统(含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 心理咨询预约管理系统2拥有三个角色: 管理员端 首页 系统近况(咨询师和注册来访者数量,预约数量) 显示最新的消息、留言和公告&#xff0…

软件测试学习笔记丨Pytest 学习指南

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32336 基本介绍 pytest框架是一个成熟,全面的测试框架,具有非常丰富的第三方插件,并且可以自定义扩展 比如:pytest-selenium , pytest-html ,…

spring模块都有哪些

Spring 框架是一个庞大而灵活的生态系统,它包含了多个模块,每个模块都提供了特定的功能和服务。以下是一些主要的 Spring 模块: Spring Core: 核心容器,提供了 IoC(控制反转)和 DI(…

推荐4个精准高效的录音转文字软件。

录音转文字在很多的场景中都能够为我们提供便利,比如:可以将课堂录音转换为文字,方便复习和整理笔记,可以将会议录音转换为文字,快速准确地记录内容,可以将采访录音转成文字,提高新闻稿件的撰写…

被Karpathy誉为“蕴藏着类似ChatGPT的机会的AI产品Notebook LM”,它到底做对了什么?

就在昨天,Karpathy在X上连续发布了多条安利帖,强烈地给大家推荐一个AI产品NotebookLM。 嘶~给周围人疯狂种草并不稀奇,但Karpathy的推荐理由给NotebookLM戴了一个高帽子-他提到这款产品让人联想到ChatGPT。 这种就令人好奇&#…

JAVA开源项目 大学生就业招聘系统 计算机毕业设计

本文项目编号 T 058 ,文末自助获取源码 \color{red}{T058,文末自助获取源码} T058,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 企…

DRF实操——项目部署

DRF实操——项目部署 一、Mysql集群1. 集群方式1)Replication集群2)PXC集群2. Docker安装PXC知识补充:具名数据卷创建docker容器django后端接口服务二、Nginx概述作用安装配置三、uWSGI1. 概述2. 项目的配置3. 将本地项目及环境打包到服务器4. uwsgi的安装与启动5. 使用uwsg…

Vue Mini基于 Vue 3 的小程序框架

新的小程序框架 https://vuemini.org/ Vue Mini 是一个基于 Vue 3 的小程序框架,它允许开发者利用 Vue 3 的强大功能来构建微信小程序。Vue Mini 的核心优势在于它的响应式系统和组合式 API,这些特性让开发者能够以一种更声明式、更高效的方式来编写和…

今天不止是A股疯,这家国产大模型也疯了!AI人:1亿小目标已实现

这两天有个很神奇的现象,就是有两个从来不碰A股的小伙伴,竟然跑过来问我——“现在上车A股还有机会吗?” 放心吧,我当然不可能在这里回答这个问题的,否则就你懂的。 今天这篇文章不是讨论A股的。而是我无意间发现&am…

脸爱云管理系统存在任意文件上传漏洞

漏洞描述 脸爱云一脸通智慧管理平台是一套功能强大、运行稳定、操作简单方便、用户界面美观的一脸通系统。该平台整合了人脸识别技术和智能化解决方案,可以实现识别和管理个体身份,为各种场景提供便捷的身份验证和管理功能。其存在任意文件上传漏洞&…

记一次vue-cli老项目的打包时长优化

记一次vue-cli老项目的打包时长优化 背景 这是一个基于 vue-cli 的 vue2 的老项目,比较久远,一般Jenkins中打包时间都在 5-6min 左右,基本能够接受。 近来由于项目原因,在该项目中加入了一些在打包时动态生成的js文件以做“缓存…

信号量SEM

前提 1.信号量的本质是一把计数器 2.申请信号本质就是预订资源 3.PV操作是原子的! 将一个公共资源当做整体访问-->锁 如果公共资源不当做整体使用,多进程可以并发的访问公共资源,但不是同一个区域,为了将资源均分,所以有了…

PE节表中是否存在misc.VirtualSize 比SizeofRawData还要大的情况

确实是存在的,这是win10自带记事本,可以看到 确实是大.所以在申请imagebuffer的时候,还是需要比较大小.但是在还原的时候.只考虑sizeofRawData即可>

Python查漏补缺

1.冒泡排序 时间复杂度O(n^2) 选择、插入都是 def bubble(data, reverse):for i in range(len(data)-1):for j in range(len(data)-i-1):if data[j] > data[j1]:data[j], data[j1] data[j1], data[j]if reverse:data.reverse()return data 2.快速排序 时间…

QT将QBytearray的data()指针赋值给结构体指针变量后数据不正确的问题

1、问题代码 #include <QCoreApplication>#pragma pack(push, 1) typedef struct {int a; // 4字节float b; // 4字节char c; // 1字节int *d; // 8字节 }testStruct; #pragma pack(pop)#include <QByteArray> #include <QDebug>int main() {testStruct …

ros2安装完成后重要的一步

安装完成ros2之后&#xff0c;每次打开新的终端都需要 source /opt/ros/humble/setup.bash 为了解决这个为题&#xff0c;我们需要做如下操作,避免每次打开一个新的在终端都要设置。 在文件的最后一行添加 source /opt/ros/foxy/setup.bash

职称评审难在哪?

没有项目业绩资料&#xff1f; 社保不符合&#xff1f; 看不懂评审文件&#xff1f; 申报材料不会做&#xff1f; 论文没地发表&#xff1f; 有这些疑问的 评论区滴滴

如何使用ssm实现白云会议管理系统+vue

TOC ssm741白云会议管理系统vue 第1章 绪论 1.1 选题动因 到现在为止&#xff0c;互联网已经进入了千家万户&#xff0c;最普通的平民百姓也有属于自己的智能设备&#xff0c;计算机各种技术的储备也是相当的丰富&#xff0c;并且实现也是没有难度&#xff0c;各行各业&…

MFU简介

1、缩写 MFU - Mask Field Utilization&#xff08;光刻掩膜版有效利用比例&#xff09; GDPW - Gross Die Per Wafer&#xff0c;每张wafer上die的数量 2、什么是MASK 在光刻机中&#xff0c;光源&#xff08;紫外光、极紫外光&#xff09;透过mask曝光在晶圆上形成图…

python12_字符类型转换

字符类型转换 # 整型 A 3.14 B "123" C True D False E "3.14" F "True" G 0.0# 整型转换函数 def to_int(m):int_m int(m)return int_m# 布尔转换为整型 def bool_to_int(m):bool_m int(m)return bool_m# 布尔类型转换为字符串 def b…