一、前言 AI Agents 的开发是当前软件创新领域的热点。随着大语言模型 (LLM) 的不断进步,预计 AI 智能体与现有软件系统的融合将出现爆发式增长。借助 AI 智能体,我们可以通过一些简单的语音或手势命令,就能完成以往需要手动操作应用程序才能实现的任务。但目前, AI 智能体的开发还处于初期阶段,正如 1990 年代的互联网,我们还在基础设施、工具和框架开发的初步阶段探索前行。本文将介绍一个名为 CrewAI 的新型智能体开发框架。
本文主要包含以下内容
认识 AI 智能体。探索 CrewAI —— 一个构建智能体的开源工具。学习如何构建一个共同创作内容的 AI 团队。了解 AI 智能体在现实生活中的应用案例。 二、什么是 AI Agents? 语言模型在翻译、总结和推理方面表现出色。但它们的潜力远不止于此。让大语言模型 (LLM) 具备代理性是充分挖掘其推理潜力的一种方法。AI 智能体就是被赋予适当工具和指令的 LLM,能够自动完成网页浏览、网络抓取、执行 SQL 查询、文件操作等任务。利用 LLM 的推理能力,这些智能体能够根据当前需求选择合适的工具。而且,我们还可以将多个智能体组合起来,共同完成更复杂的任务。
当我们谈论如何构建 AI Agents时,首先想到的工具就是 LangChain。然而,使用 LangChain 手动协调 AI 智能体执行协作任务可能会相当困难。CrewAI 正是为了解决这一问题而生。
三、什么是 CrewAI? CrewAI 是一个开源框架,专门用于协调具有角色扮演和自主操作的 AI 智能体。它可以帮助我们轻松创建能够共同实现复杂目标协作的 AI 智能体。这个框架的设计目的是让 AI 智能体能够扮演不同的角色、分配任务并共享目标,就像现实世界中的团队成员一样。CrewAI 的几大特性包括:
基于角色的AI智能体设计:定义具备特定角色、目标和背景故事的智能体,让 LLM 在生成回答前有更丰富的上下文。灵活的任务管理方式:通过可定制化工具定义任务,并能够动态地分配给不同的智能体。智能体间的自主委派机制:智能体能够自行决定任务分配并相互协作,这大大提高了解决问题的效率。流程驱动策略:目前系统只支持按顺序执行任务和按层级组织流程,Crew AI正在研发更为复杂的流程管理方式,比如基于共识和自主决策的流程。保存任务输出:可以将任务产生的数据保存为文件,便于后续使用。输出解析功能:根据需要,可以将任务输出解析成 Pydantic 模型或 Json 格式。支持开源模型集成:可以利用 Open AI 或其他开源模型来运行你的团队。 CrewAI 能够与 LangChain 生态系统无缝集成。这意味着我们可以利用 LangChain 提供的工具和大语言模型 (LLM) 的集成功能,与 CrewAI 一起工作。
简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。
一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更加的简单。
一般Web应用的需要进行认证和授权。
认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户
授权:经过认证后判断当前用户是否有权限进行某个操作
而认证和授权也是SpringSecurity作为安全框架的核心功能。
1.快速入门 1.1.引入依赖 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> <version>3.1.8</version> </dependency> 如果是gradle则使用
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security implementation group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '3.1.8' 引入SpringSecurity依赖后,再次输入地址,都会统一调转到一个登录界面,登录用户名是user,密码是在项目启动时,输出在控制台
2.SpringBoot整合Redis 我是在Windos环境下安装Redis,这里在Windows下启动Redis 需要进入到安装目录库
输入 redis-server.exe redis.windows.conf
2.1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>3.1.8</version> </dependency> implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis', version: '3.1.8' 2.2.配置Redis 在配置文件中对redis进行配置
# redis相关配置 spring: data: redis: port: 6379 host: 127.0.0.1 2.3.使用Redis Template 2.3.1.将Redis Template注入到Spring容器中 主要是为了 统一管理
vue3_vite_project 基于 Vue3 + Vite 搭建的前端工程化项目演示模板
环境准备 开发环境:Node.js v16.14.2 + npm v8.3.2开发工具:Visual Studio Code or WebStorm源代码管理:Gitnpm镜像:npm config set registry https://registry.npmmirror.com 技术栈 技术栈描述Vue渐进式 JavaScript 框架Vite新一代前端开发与构建工具Element Plus基于 Vue 3,面向设计师和开发者的组件库Pinia符合直觉的 Vue.js 状态管理库vue-routerVue.js 的官方路由管理库SassCSS 预处理器VueUse基于 Vue 组合式 API 的实用工具集Axios用于浏览器和 Node.js 的基于 Promise 的 HTTP 请求库Echarts一个基于 JavaScript 的开源可视化图表库Eslint可配置的 JavaScript 检查器Prettier代码格式化工具 项目构建 #创建项目 npm create vite #安装依赖 npm install #启动项目 npm run dev #构建项目 npm run build 到这一步,如果能成功运行项目,恭喜你!一个项目的基本框架已经搭建完成!
整理项目结构 主要是让项目工程更加感觉清晰
<!--src/App.vue--> <template> <div> <h1>App</h1> </div> </template> 删除 src/style.
前言 WebServer是一个很好的入门级C++项目,因为它涉及到了方方面面,不仅可以提高编程能力,还包括了操作系统、计算机网络、数据库等方面的知识,所以我很推荐大家去入手这个项目。说细一点这个项目包含系统编程、日志系统、线程池、网络知识、并发模型等实现,但是很多人一开始做这个项目的时候,会觉得逻辑很混乱从而无从下手,所以我写下这篇文章目的就是帮助大家起到一个梳理逻辑的作用,好了废话不多说,咱们往下看!
一、下载项目、功能测试 拿到一个项目首先不要着急自己复现、也不要着急去看功能,首先我们要测试一下能不能跑成功
qinguoyi/TinyWebServer: :fire: Linux下C++轻量级WebServer服务器 (github.com)以这个项目为例
在这个过程中,可能会遇到如下这个问题:
不要慌~ 作者给出了解决方案
二、Demo演示 三、该怎么去看框架? 首先进入到main函数里,一层一层的看依赖关系,直到找到最里面的那一层,也就是最底层,然后从最底层开始,一个文件一个文件的写。我们举例来看,main函数里面,最先是个Config类的对象,这个对象用来进行配置操作,比如对端口号、日志写入方式、触发组合模式等等的赋值,所以我们暂且不管它。接下来我们可以观察到,有一个WebServer类的对象server,并且发现server调用了一堆函数,那我们便知道最后在main函数里面全部依靠server这个对象实现,所以不难得出,WebServer类就是我们的最高层,通过最终封装一个WebServer类来实现一切功能,但是我们要找到是最底层,从最底层一层一层往上写,所以接下来我们进入WebServer类进行观察,我们知道WebServer类的主要职责就是将之前设计的各个模块串联在了一起,我们可以观察到WebServer类中有许多数据成员和成员函数,我们暂时不需要知道这些成员是具体来干什么的,只需要先知道其中的函数是给自己相关的数据成员赋值的或者实现某个功能,比如在log_write()中来决定是异步写日志还是同步写日志,sql_pool()函数是用来申请一个数据库连接池的对象,并且进行初始化等操作,thread_pool()是用来申请一个线程池对象,并进行相关初始化操作的。我们目前不需要知道很多信息,但是请务必先留意一下eventListen()和eventLoop()这两个函数,我们先进入webserver.cpp中去看,注意到eventListen()是用来进行监听的,当有新客户来临的时候,将它加入监听集合,那eventLoop()是用来干什么的呢?可以看到它的循环体里面,好像是在等待事件发生,然后再处理各种各样的事情并且一直在循环,是的,它就是我们的主循环函数,是用来处理各种业务的。接下来既然我们是WebServer服务器项目,那什么是最重要的呢?没错当然是http解析了,所以接下来我们看http解析的实现,浏览器(客户端)发起http连接请求,我们的服务器就会接收到请求,并且需要将请求的内容记录起来,最后再做出响应的答复给浏览器,在http类中,我们要做的事情就是接收连接,处理连接(设计两个状态机,即主状态机/从状态机来进行报文解析),响应连接,最后封装了一个运行函数(process)。那我们在接收连接,处理连接,以及做出响应处理的时候不能就一个线程来实现吧,那效率该有多低呀,所以在这一层之前我们必须先实现线程池。一切的一切需要先有用户吧,他们才能进行后续的一切请求,所以在这一层之前,需要实现数据库连接池。其实我们不难想象,我们实现的所有东西,都需要有一个记录吧,日志系统几乎是每一个实际的软件项目从开发、测试到交付,再到后期的维护过程中极为重要的查看软件代码运行流程,还原错误现场,记录运行错误位置等的重要依据。所以需要先实现一个日志系统。其实无论是写日志,还是请求各种资源等的操作都需要信号量或锁机制来实现吧,至此,我们便得到了整个项目的第一层也就是最底层,便是锁机制的实现,接下来分别是日志系统、数据库连接池、线程池、http连接处理、封装WebServer类、配置文件再到main函数,接下来我们便一层一层去分析!
第一层:锁机制的实现 在这个类中,我们需要封装信号量、锁机制以及条件变量,互斥锁用于同步线程之间对共享数据的访问,而条件变量或信号量则时用于在线程之间同步共享数据的值。
1.sem类就是我们要用来实现信号量的类,在这个类中,封装了以下操作
在构造函数中用sem_init来初始化一个信号量,有默认和带初值两种初始化方式,并且在析构函数中销毁信号量,释放其资源。
sem_wait操作是用来以原子操作的方式将信号量值 - 1,若信号量值为0则阻塞
sem_post操作是用来以原子操作将信号量+1
2.locker类同理,在构造函数与析构函数中分别初始化以及释放资源
lock操作是上锁,unlock操作是解锁,get操作时获得互斥锁的指针
3.cond类亦是如此
第二层:Log类 顾名思义,LOG类就是项目的日志系统。所谓日志,即由服务器自动创建,并记录运行状态,错误信息,访问数据的文件等。
日志的实现有两种,一种是同步写日志,一种是异步写日志
同步日志:日志写入函数与工作线程串行执行,由于涉及I/O操作,同步日志会阻塞整个处理流程,服务器所能处理的并发能力将有所下降,尤其是在访问峰值时,写日志可能会成为系统的瓶颈
异步日志:将工作线程所写的日志内容先存入阻塞队列,写线程从阻塞队列中取出内容,写入日志
在异步日志中,每个工作线程当有日志需要处理时,将所需写的内容所在内存加入一个阻塞队列,然后就不管了。而日志系统会单独分配一个写线程,不断地从阻塞队列中获得任务并写入日志文件中。从上面地日志工作流程描述中我们可以发现,这是一个典型的生产者-消费者模型。其中工作线程是生产,写线程是消费者。那么,生产者-消费者模型的临界区(缓冲区)是什么呢?在我们日志系统中,这个临界区就是一个队列。 在本项目中,我们使用循环队列来实现。
写日志的操作是通关一个对象来实现的,所以需要用单例模式来获取一个实例。
1.get_instance用来获取唯一的Log类实例
2.m_count用来记录日志行数,m_is_async用来标记是否是异步写日志,它们俩通过构造函数进行初始化,*m_fp是打开log的文件指针,它在析构函数中进行资源释放
3.flush函数用来刷新文件缓冲区
4.flush_log_thread用来进行异步写日志操作
5.init函数是对除了构造函数初始化之外的其余数据成员进行初始化的,可选择的参数有日志文件、日志缓冲区大小、最大行数、以及最长日志条队列
6.write_log中对日志进行了划分等级
第三层:connection_pool类与connectionRAII类 在程序设计思想中,"池"(Pool)通常指的是一种资源管理的模式,其中资源被集中管理并通过预先分配而不是按需创建。这种模式可以用于多种类型的资源,比如:
内存池
线程池
数据库连接池
那么,我们为什么要使用池呢?我们以数据库连接池举例,来说明一下池的优点和好处。
首先,我们先来看看数据库访问的一般流程:
1.当系统需要访问数据库时,先系统创建数据库连接
2.接着完成数据库操作
3.最后断开数据库连接
这非常好理解,就仿佛把大象放入冰箱需要几步一样。但是,从这个流程中我们可以看出,除了第二步,第一步和第三步都是重复且耗时的无意义工作;而且当系统需要频繁地访问数据库时,就会频繁创建和断开数据库连接,这种行为不但耗时,甚至容易对数据库造成安全隐患。因此,我们使用“池”来解决这一问题。在程序初始化时,我们就立刻创建多个数据连接,把它们集中管理。当程序需要使用时,就从“池”中取出使用,用完再放回池中,这样就避免了频繁的数据库连接和断开操作,而且更加地安全可靠。
通过上面地介绍,我们发现,其实池是一个装着资源地容器。如果池里装的是进程就是进程池,如果是线程就是线程池,而如果是数据库连接,那就是数据库连接池。具体实现池的方法有许多,比如:数组,链表,队列等。
1.static connection_pool* Getinstance()是单例模式,是用来获取数据库连接池的,也就是我们最终从这一个池中获取数据库连接
2.init和上述几个类一样,是初始化操作
3.MYSQL *Getconnection()用来获取数据库连接
4.bool ReleaseConnection(MYSQL *con)释放数据库连接
5.int GetFreeConn()获取空余连接数量
6.void DestroyPool()销毁所有连接,也就是摧毁池
其实在这一部分文件中,我们还涉及到了一个很重要的思想,就是RAII类
RAII(Resource Acquisition Is Initialization)(资源获取即初始化)是一种C++编程中的重要设计原则,用于管理资源的获取和释放。RAII的核心思想是通过对象的生命周期来控制资源的生命周期,从而确保资源在合适的时候被正确地获取和释放。我们的智能指针如unique_ptr,锁lock_gurad和文件流都采用了RAII的机制。
现在越来越多的网站已经能够通过JA3或者其他指纹信息,来识别你是不是爬虫了。传统的方式比如换UA,加代理是没有任何意义了,所以这个时候我们就需要使用到curl_cffi 了。
1.TLS 指纹是啥? 在绝大多数的网站都已经使用了 HTTPS,要建立 HTTPS 链接,服务器和客户端之间首先要进行
TLS 握手,在握手过程中交换双方支持的 TLS 版本,加密算法等信息。不同的客户端之间的差异
很大,而且一般这些信息还都是稳定的,所以服务端就可以根据 TLS 的握手信息来作为特征,识别
一个请求是普通的用户浏览器访问,还是来自 Python 脚本等的自动化访问。
JA3 是生成 TLS 指纹的一个常用算法。它的工作原理也很简单,大概就是把以上特征拼接并求 md5。
查看 tls 指纹的网站有:
https://tls.browserleaks.com/jsonTrackMe | Homehttps://kawayiyi.com/tls 不同网站的生成的指纹可能有差异,但是多次访问同一个网站生成的指纹是稳定的,而且能区分开
不同客户端。下文以第一个网站为例。
2.直接安装 pip install curl_cffi 功能简介:
支持JA3/TLS和http2指纹模拟;比requests/tls_client快分开,和aiohttp/pycurl的速度比肩;预编译,不需要自己的机器上再弄一遍;支持asyncio,并且每个请求都可以换代理;修改请求的API,支持http 2.0;模仿requests。 先来看一段代码:
import requests from pprint import pprint headers = { 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', 'cache-control': 'no-cache', 'dnt': '1', 'pragma': 'no-cache', 'sec-ch-ua': '"Chromium";v="118", "Microsoft Edge";v="118", "Not=A?Brand";v="99"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'same-origin', 'sec-fetch-user': '?
文章目录 一、虚函数(Virtual Function)1.1 定义和作用1.2 实现原理1.3 示例代码1.4 虚函数的重写定义规则注意事项示例 1.5 基类和派生类的虚函数表**示例理解** 二、纯虚函数(Pure Virtual Function)2.1 定义和作用2.2 示例代码 三、总结 在C++面向对象编程中,多态性是其三大特性之一(封装、继承和多态)。为了实现多态性,C++引入了虚函数(Virtual Function)和纯虚函数(Pure Virtual Function)的概念。本文将深入探讨虚函数和纯虚函数的原理和应用,帮助读者更好地理解它们在C++中的作用。 一、虚函数(Virtual Function) 1.1 定义和作用 虚函数是在基类中使用关键字 virtual 声明的成员函数,它允许派生类对其进行重写(Override),实现运行时多态。当通过基类指针或引用调用虚函数时,实际调用的是对象类型对应的派生类中的函数,这个过程称为动态绑定(Dynamic Binding)或晚绑定(Late Binding)。
1.2 实现原理 虚函数的实现原理基于虚函数表(Virtual Table,简称VTable)。每个使用虚函数的类都有一个虚函数表,该表是一个函数指针数组,存储了指向类的虚函数的指针。类的每个实例都包含一个指向其虚函数表的指针(vptr),通过这个指针可以找到并调用正确的虚函数实现。
当派生类覆盖(重写)基类的虚函数时,派生类的虚函数表中相应位置的函数指针会被更新为指向派生类中的函数。如果派生类没有重写虚函数,则派生类的虚函数表中会保留指向基类虚函数的指针。
1.3 示例代码 #include <iostream> using namespace std; class Base { public: virtual void show() { cout << "Base class show" << endl; } }; class Derived : public Base { public: void show() override { cout << "
👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。
python懂车帝数据可视化(代码+报告) 目录 python懂车帝数据可视化(代码+报告)一、研究背景二、研究目的三、数据采集过程3.1 反爬情况3.2 爬取过程 四、数据展示4.1 数据预处理4.2 数据可视化 一、研究背景 在当今社会,汽车已经成为人们生活中不可或缺的一部分,而汽车的购车决策往往受到各种因素的影响。为了更好地了解市场上不同汽车的价格分布情况,以及为购车者提供更全面的信息,我们对懂车帝网站上的汽车数据进行了深入研究和分析。该数据包含了各种品牌和型号的汽车,涵盖了最低价、最高价等关键信息,为我们提供了一个全面洞察汽车市场的机会。
总体而言,通过对懂车帝网站上爬取的汽车数据进行综合分析,我们有望揭示汽车市场中价格的分布特征,为购车者提供更为全面的参考,为汽车制造商提供更为明智的市场定价策略,促使汽车市场更好地满足消费者需求,推动整个行业的可持续发展。
👇👇👇 关注公众号,回复 “二手车可视化” 获取源码👇👇👇
二、研究目的 本研究的目的在于深入分析懂车帝网站上的汽车数据,主要关注汽车的最低价和最高价这两个关键指标。通过对这些价格数据的综合研究,我们旨在揭示不同汽车在市场上的价格分布情况,以及探究价格背后可能存在的因素。具体而言,我们的研究目的包括以下几个方面
首先,我们旨在了解不同汽车型号的最低价和最高价的分布特征。通过对这两个关键价格指标的统计学分析,我们可以得知市场上汽车价格的整体水平和波动情况。这有助于消费者更全面地了解不同车型在价格上的差异,为购车决策提供更为明智的依据。
其次,我们将通过分析最低价和最高价的最大、最小、中位数和方差等统计指标,揭示价格分布的规律。通过了解价格的最大值和最小值,我们可以确定市场上价格最高和最低的汽车型号,为购车者提供关键信息。同时,中位数和方差的分析将揭示价格的中间趋势和波动幅度,有助于我们更全面地了解市场的价格变化趋势。
三、数据采集过程 3.1 反爬情况 从提供的代码中,虽然没有直接看到网站反爬虫的措施,但我们可以根据代码的一些特征和编写方式来进行分析。以下是一些可能的反爬情况的分析
1. UserAgent头部
代码中设置了请求头的UserAgent字段,模拟了浏览器访问,这是常见的反爬手段。一些网站会检测UserAgent,如果发现是爬虫或非正常浏览器访问,可能会限制或拒绝访问。
headers = { "UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } 2. IP封锁或限制
在较为严格的反爬情况下,网站可能会对请求的IP地址进行监控。频繁的大量请求可能导致IP被封锁或限制访问。为了规避这种情况,可以考虑使用代理池,轮换IP进行请求。
3. 请求频率控制
代码中没有显式的设置请求频率控制,但在实际爬取中,为了规避被反爬,建议合理控制请求频率,避免短时间内发送过多请求。
👇👇👇 关注公众号,回复 “二手车可视化” 获取源码👇👇👇
3.2 爬取过程 这段爬取数据的代码主要包括两个Python脚本懂车帝爬虫.py 和 懂车帝可视化.py。首先,我们来分析懂车帝爬虫.py中的数据爬取过程
1. 爬取数据源
使用requests库向懂车帝网站发送HTTP请求,模拟浏览器访问行为。
通过json()方法解析HTTP响应,获取JSON格式的汽车信息数据。
url = f"
报错 Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat D:\software\jdk1.8\bin\java.exe -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always "-javaagent:D:\software\IntelliJ IDEA 2021.2\lib\idea_rt.jar=50767:D:\software\IntelliJ IDEA 2021.2\bin" -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dfile.encoding=UTF-8 -classpath D:\software\jdk1.8\jre\lib\charsets.jar;D:\software\jdk1.8\jre\lib\deploy.jar;D:\software\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\software\jdk1.8\jre\lib\ext\cldrdata.jar;D:\software\jdk1.8\jre\lib\ext\dnsns.jar;D:\software\jdk1.8\jre\lib\ext\jaccess.jar;D:\software\jdk1.8\jre\lib\ext\jfxrt.jar;D:\software\jdk1.8\jre\lib\ext\localedata.jar;D:\software\jdk1.8\jre\lib\ext\nashorn.jar;D:\software\jdk1.8\jre\lib\ext\sunec.jar;D:\software\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\software\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\software\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\software\jdk1.8\jre\lib\ext\zipfs.jar;D:\software\jdk1.8\jre\lib\javaws.jar;D:\software\jdk1.8\jre\lib\jce.jar;D:\software\jdk1.8\jre\lib\jfr.jar;D:\software\jdk1.8\jre\lib\jfxswt.jar;D:\software\jdk1.8\jre\lib\jsse.jar;D:\software\jdk1.8\jre\lib\management-agent.jar;D:\software\jdk1.8\jre\lib\plugin.jar;D:\software\jdk1.8\jre\lib\resources.jar;D:\software\jdk1.8\jre\lib\rt.jar;D:\project\target\classes;C:\Users\mayer\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.7.6\spring-boot-starter-web-2.7.6.jar;C:\Users\mayer\.m2\repository\org\springframework\boot\spring-boot-starter\2.7.6\spring-boot-starter-2.7.6.jar;C:\Users\mayer\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.7.6\spring-boot-starter-logging-2.7.6.jar;C:\Users\mayer\.m2\repository\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;C:\Users\mayer\.m2\repository\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;C:\Users\mayer\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;C:\Users\mayer\.m2\repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;C:\Users\mayer\.m2\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;C:\Users\mayer\.m2\repository\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;C:\Users\mayer\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.7.6\spring-boot-starter-json-2.7.6.jar;C:\Users\mayer\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.4\jackson-datatype-jdk8-2.13.4.jar;C:\Users\mayer\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.4\jackson-datatype-jsr310-2.13.4.jar;C:\Users\mayer\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.4\jackson-module-parameter-names-2.13.4.jar;C:\Users\mayer\.m2\repository\org\springframework\spring-web\5.3.24\spring-web-5.3.24.jar;C:\Users\mayer\.m2\repository\org\springframework\spring-beans\5.3.24\spring-beans-5.3.24.jar;C:\Users\mayer\.m2\repository\org\springframework\spring-webmvc\5.3.24\spring-webmvc-5.3.24.jar;C:\Users\mayer\.m2\repository\org\springframework\spring-context\5.3.24\spring-context-5.3.24.jar;C:\Users\mayer\.m2\repository\org\springframework\spring-expression\5.3.24\spring-expression-5.3.24.jar;C:\Users\mayer\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.7.6\spring-boot-starter-tomcat-2.7.6.jar;C:\Users\mayer\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\mayer\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.69\tomcat-embed-core-9.0.69.jar;C:\Users\mayer\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.69\tomcat-embed-el-9.0.69.jar;C:\Users\mayer\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.69\tomcat-embed-websocket-9.0.69.jar;C:\Users\mayer\.m2\repository\org\springframework\boot\spring-boot-devtools\2.7.6\spring-boot-devtools-2.7.6.jar;C:\Users\mayer\.m2\repository\org\springframework\boot\spring-boot\2.7.6\spring-boot-2.7.6.jar;C:\Users\mayer\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.7.6\spring-boot-autoconfigure-2.7.6.jar;C:\Users\mayer\.m2\repository\org\projectlombok\lombok\1.18.24\lombok-1.18.24.jar;C:\Users\mayer\.m2\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;C:\Users\mayer\.m2\repository\org\springframework\spring-core\5.3.24\spring-core-5.3.24.jar;C:\Users\mayer\.m2\repository\org\springframework\spring-jcl\5.3.24\spring-jcl-5.3.24.jar;C:\Users\mayer\.m2\repository\com\baomidou\mybatis-plus-boot-starter\3.4.1\mybatis-plus-boot-starter-3.4.1.jar;C:\Users\mayer\.m2\repository\com\baomidou\mybatis-plus\3.4.1\mybatis-plus-3.4.1.jar;C:\Users\mayer\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.7.6\spring-boot-starter-jdbc-2.7.6.jar;C:\Users\mayer\.m2\repository\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;C:\Users\mayer\.m2\repository\org\springframework\spring-jdbc\5.3.24\spring-jdbc-5.3.24.jar;C:\Users\mayer\.m2\repository\com\baomidou\mybatis-plus-generator\3.4.1\mybatis-plus-generator-3.4.1.jar;C:\Users\mayer\.m2\repository\com\baomidou\mybatis-plus-extension\3.4.1\mybatis-plus-extension-3.4.1.jar;C:\Users\mayer\.m2\repository\com\baomidou\mybatis-plus-core\3.4.1\mybatis-plus-core-3.4.1.jar;C:\Users\mayer\.m2\repository\com\baomidou\mybatis-plus-annotation\3.4.1\mybatis-plus-annotation-3.4.1.jar;C:\Users\mayer\.m2\repository\com\github\jsqlparser\jsqlparser\3.2\jsqlparser-3.2.jar;C:\Users\mayer\.m2\repository\org\mybatis\mybatis\3.5.6\mybatis-3.5.6.jar;C:\Users\mayer\.m2\repository\org\mybatis\mybatis-spring\2.0.5\mybatis-spring-2.0.5.jar;C:\Users\mayer\.m2\repository\org\freemarker\freemarker\2.3.30\freemarker-2.3.30.jar;C:\Users\mayer\.m2\repository\mysql\mysql-connector-java\5.1.37\mysql-connector-java-5.1.37.jar;C:\Users\mayer\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.7.6\spring-boot-starter-security-2.7.6.jar;C:\Users\mayer\.m2\repository\org\springframework\spring-aop\5.3.24\spring-aop-5.3.24.jar;C:\Users\mayer\.m2\repository\org\springframework\security\spring-security-config\5.7.5\spring-security-config-5.7.5.jar;C:\Users\mayer\.m2\repository\org\springframework\security\spring-security-core\5.7.5\spring-security-core-5.7.5.jar;C:\Users\mayer\.m2\repository\org\springframework\security\spring-security-crypto\5.7.5\spring-security-crypto-5.7.5.jar;C:\Users\mayer\.m2\repository\org\springframework\security\spring-security-web\5.7.5\spring-security-web-5.7.5.jar;C:\Users\mayer\.m2\repository\org\springframework\boot\spring-boot-starter-data-redis\2.7.6\spring-boot-starter-data-redis-2.7.6.jar;C:\Users\mayer\.m2\repository\org\springframework\data\spring-data-redis\2.7.6\spring-data-redis-2.7.6.jar;C:\Users\mayer\.m2\repository\org\springframework\data\spring-data-keyvalue\2.7.6\spring-data-keyvalue-2.7.6.jar;C:\Users\mayer\.m2\repository\org\springframework\data\spring-data-commons\2.7.6\spring-data-commons-2.7.6.jar;C:\Users\mayer\.m2\repository\org\springframework\spring-tx\5.3.24\spring-tx-5.3.24.jar;C:\Users\mayer\.m2\repository\org\springframework\spring-oxm\5.3.24\spring-oxm-5.3.24.jar;C:\Users\mayer\.m2\repository\org\springframework\spring-context-support\5.3.24\spring-context-support-5.3.24.jar;C:\Users\mayer\.m2\repository\io\lettuce\lettuce-core\6.1.10.RELEASE\lettuce-core-6.1.10.RELEASE.jar;C:\Users\mayer\.m2\repository\io\netty\netty-common\4.1.85.Final\netty-common-4.1.85.Final.jar;C:\Users\mayer\.m2\repository\io\netty\netty-handler\4.1.85.Final\netty-handler-4.1.85.Final.jar;C:\Users\mayer\.m2\repository\io\netty\netty-resolver\4.1.85.Final\netty-resolver-4.1.85.Final.jar;C:\Users\mayer\.m2\repository\io\netty\netty-buffer\4.1.85.Final\netty-buffer-4.1.85.Final.jar;C:\Users\mayer\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.85.Final\netty-transport-native-unix-common-4.1.85.Final.jar;C:\Users\mayer\.m2\repository\io\netty\netty-codec\4.1.85.Final\netty-codec-4.1.85.Final.jar;C:\Users\mayer\.m2\repository\io\netty\netty-transport\4.1.85.Final\netty-transport-4.1.85.Final.jar;C:\Users\mayer\.m2\repository\io\projectreactor\reactor-core\3.4.25\reactor-core-3.4.25.jar;C:\Users\mayer\.m2\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;C:\Users\mayer\.m2\repository\io\jsonwebtoken\jjwt\0.9.1\jjwt-0.9.1.jar;C:\Users\mayer\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.13.4.2\jackson-databind-2.13.4.2.jar;C:\Users\mayer\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.4\jackson-annotations-2.13.4.jar;C:\Users\mayer\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.13.4\jackson-core-2.13.4.jar;C:\Users\mayer\.m2\repository\com\github\axet\kaptcha\0.0.9\kaptcha-0.0.9.jar;C:\Users\mayer\.m2\repository\com\jhlabs\filters\2.0.235\filters-2.0.235.jar;C:\Users\mayer\.m2\repository\cn\hutool\hutool-all\5.3.3\hutool-all-5.3.3.jar;C:\Users\mayer\.m2\repository\org\apache\commons\commons-lang3\3.11\commons-lang3-3.11.jar cn.itbluebox.springbootadminvue.SpringbootAdminvueApplication 11:34:42.960 [Thread-1] DEBUG org.springframework.boot.devtools.restart.classloader.RestartClassLoader - Created RestartClassLoader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@731c106d . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .
CleanMyMac X v4.14.4 是由兔八哥爱分享搜集到的一个系统清理工具,删除系统缓存文件 , 多余的应用程序语言包 , PowerPc软件运行库等。 是个给你的硬盘瘦身的好工具。
新版本采用全新的UI设计,支持macOS 13.3。
兔八哥爱分享测试环境;Macos 14 M1
CleanMyMac X v4.15.0 更新日志
02.09号更新Macat v4.15.0 版本!✅ Sip ✅ Macos 14 通用芯片(intel/M)无需勾选Rosetta 【推荐🔥 】
12.04号更新Macat v4.14.6 版本!✅ Sip ✅ Macos 14 通用芯片(intel/M)无需勾选Rosetta 【推荐🔥 】
12.04号更新Macat v4.14.5 版本!✅ Sip ✅ Macos 14 通用芯片(intel/M)无需勾选Rosetta 【推荐🔥 】
10.27号更新Macat v4.14.4 版本!✅ Sip ✅ Macos 14 通用芯片(intel/M)无需勾选Rosetta 【推荐🔥 】
10.10号更新Antibiotics v4.14.3 版本!✅ Sip ✅ Macos 14 通用芯片(intel/M)无需勾选Rosetta 【推荐🔥 】
08.18号更新QiuChenly v4.
目录
一、Python虚拟环境搭建
1.1、下载Python
1.2、使用 venv方法(创建虚拟环境)
1.3、进入虚拟环境
1.4、用pip下载项目需要的包(与nuitka)
二、 使用 Nuitka 打包
2.1、打包常用命令(使用nuitka --help可查看所有命令)
2.2、我的项目打包示例(简单的摄像头项目)
2.3、注意事项
2.4、打包成功
三、 参考文章
四、总结
一、Python虚拟环境搭建 打包Python软件,最好用虚拟环境
1.1、下载Python 这个应该都有了。python-3.9.5-amd64.zip - 蓝奏云(没有下载的话,这里可以下载)
1.2、使用 venv方法(创建虚拟环境) 执行:python -m venv myenv # python -m venv +虚拟环境名称 python -m venv myenv # 其他 source myenv/bin/activate # 在 Linux 或 macOS 上 myenv\Scripts\activate.bat # 在 Windows 上 然后就在当前地方创建一个myenv文件夹
1.3、进入虚拟环境 然后进入目录“E:\aaaa\myenv\Scripts”
这里提供了两个方法:
调用activate文件——可以进入我们的虚拟环境
调用deactivate文件——可以退出我们的虚拟环境
成功进入
1.4、用pip下载项目需要的包(与nuitka) # 换源 pip config set global.index-url https://pypi.
1. ZooKeeper 是什么? ZooKeeper 是一个开源的分布式协调服务。它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
2. ZooKeeper 提供了什么 文件系统
通知机制
3. Zookeeper 怎么保证主从节点的状态同步? Zookeeper 的核心是原子广播机制,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 Zab 协议。Zab 协议有两种模式,它们分别是恢复模式和广播模式。
恢复模式
当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数 server 完成了和 leader 的状态同步以后,恢复模式就结束了。状态同步保证了 leader 和 server 具有相同的系统状态。
广播模式
一旦 leader 已经和多数的 follower 进行了状态同步后,它就可以开始广播消息了,即进入广播状态。这时候当一个 server 加入 ZooKeeper 服务中,它会在恢复模式下启动,发现 leader,并和 leader 进行状态同步。待到同步结束,它也参与消息广播。ZooKeeper 服务一直维持在 Broadcast 状态,直到 leader 崩溃了或者 leader 失去了大部分的 followers 支持。
4. Zookeeper Watcher 机制 – 数据变更通知 工作机制:
(1)客户端注册 watcher
(2)服务端处理 watcher
(3)客户端回调 watcher
(1)一次性
目录 一、概述二、安装前准备三、Windows 安装1. 方式一2. 方式二 一、概述 官网:https://tomcat.apache.org/
Tomcat 是一个免费的、开放源代码的 Web 应用服务器,属于轻量级应用服务器,由 Apache、Sun 和一些公司以及个人共同开发而成,是 Apache 软件基金会项目中的一个核心项目。Tomcat 深受 Java 爱好者的喜爱,是开发和调试JSP 程序的首选,也是中小型系统和并发访问用户不是很多的场合下被普遍使用的服务器。
Tomcat 由一系列的组件构成,其中核心的组件有三个:
Web 容器:它负责完成 web 服务器的功能。Servlet 容器:名字为 catalina ,用于处理 Servlet 代码JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码 此外,Tomcat 还有以下功能:
负责接收和反馈外部请求的连接器(Connector)负责处理请求的容器(Container)管理 Servlet 应用的生命周期把客户端请求的 URL 映射到对应的Servlet与 Servlet 程序合作处理 HTTP 请求 以下内容针对的是在 Windows 系统下如何安装 Tomcat
二、安装前准备 在安装 Tomcat 之前要先确保电脑上是否已配置过 Java 的环境变量,可调出命令窗口(win + R 再输入 cmd),通过 java -version 来检验
如果没有显示 Java 的版本信息,就需要先配置 Java 环境变量,具体操作可参见:Java-环境配置(详细教程)
三、Windows 安装 Tomcat 的版本选择要根据 Java 的版本而来的,具体下载什么版本可以去官网上查看,点击 Which version 版本选择
大家好,给大家分享一下python程序如何在手机上运行,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!
Source code download: 本文相关源码
大家好,小编来为大家解答以下问题,手机上的python怎么运行程序,手机的python怎么运行文件,今天让我们一起来看看吧!
1、python程序怎么在手机上运行 python语言应用很广泛,自己也很喜欢使用它,其实我们也可以直接在自己的安卓手机上做python开发学习,只需要简单的配置下环境就可以了。
首先我们拦轿手可以在手机上安装qpython3python创意作品代码。
接着我们可以直接选择“终端”
在这里面我们可以直接一行一行输入执行代码简嫌。
我们也可以选择进入“编辑器”。
直接输入我们的python脚本代码。
然后点击底部的“执行”按钮,就可以运行脚本了,并输出“你好”。
我们也可以选择进入帆弯“程序”,在里面有好多的案例供我们学习使用。
点击后选择“Run”就可以执行程序,选择“open”可以查看案例的代码方便学习。
更多Python相关技术文章,请访问Python教程栏目进行学习!
2、python官网可以在手机上打开吗 python语言应用很广泛,自己也很喜欢使用它,其实我们也可以直接在自己的安卓手机上做python开发学习,只需要简单的配置下环境就可以了PHP与PYTHON:基于语法,功能,应用程序等的详细比较。
首先我们拦轿手可以在手机上安装qpython3。
接着我们可以直接选择“终端”
在这里面我们可以直接一行一行输入执行代码简嫌。
我们也可以选择进入“编辑器”。
直接输入我们的python脚本代码。
然后点击底部的“执行”按钮,就可以运行脚本了,并输出“你好”。
我们也可以选择进入帆弯“程序”,在里面有好多的案例供我们学习使用。
点击后选择“Run”就可以执行程序,选择“open”可以查看案例的代码方便学习。
更多Python相关技术文章,请访问Python教程栏目进行学习!经查询可以知道,python可以在手机上运行,python官网 可以在手机上打开的,但是Python想要李尘在手机上运行的话只有通过已经集成好开发环境的软件,以及自己搭建虚拟环境这两种方式了。其中使用app是比较方便又简单的方法了,那下面这一篇文章就来介绍一下使用Qpython这个软件来使用手机python,往下看看吧。Qpython是一个在安卓上面可以去下载安装的手机app,在应用市场或者是浏览器里面搜索一下就有很多的安装包可以去下载,但是在安装的时候需要注意的一点就是Qpython现在只能够在安卓设备上使用。
点击手机上的Qpython并进入之后就可以看到在主页有着五个选项,点击编辑器选项就能够打开python程序的代码编写界面。在这个界面的底部则是各种返回和添加注释的小工具,点击第四个图标,也就是文件的图标就能将刚刚编写好的python代码保存为py文件。
终端的作用就是和祥扰正电脑上面的一样了,可以用来谨悔去执行pip命令以及编写python代码并运行,将之前保存好的python文件路径输入进来也能够直接去运行。
而QPYPI的选项作用则是用来去下载安装python库的,它点击进去之后就可以将现在有的库给列出来。想要下载安装其他库的话就可以在搜索框里面输入搜索即可,这里的默认下载源就是pypi的官方网站,暂时没有换源的处理方法
3、手机python如何调用安卓api python语言应用很广泛,自己也很喜欢使用它,其实我们也可以直接在自己的安卓手机上做python开发学习,只需要简单的配置下环境就可以了。
首先我们拦轿手可以在手机上安装qpython3。
接着我们可以直接选择“终端”
在这里面我们可以直接一行一行输入执行代码简嫌。
我们也可以选择进入“编辑器”。
直接输入我们的python脚本代码。
然后点击底部的“执行”按钮,就可以运行脚本了,并输出“你好”。
我们也可以选择进入帆弯“程序”,在里面有好多的案例供我们学习使用。
点击后选择“Run”就可以执行程序,选择“open”可以查看案例的代码方便学习。
更多Python相关技术文章,请访问Python教程栏目进行学习!经查询可以知道,python可以在手机上运行,python官网 可以在手机上打开的,但是Python想要李尘在手机上运行的话只有通过已经集成好开发环境的软件,以及自己搭建虚拟环境这两种方式了。其中使用app是比较方便又简单的方法了,那下面这一篇文章就来介绍一下使用Qpython这个软件来使用手机python,往下看看吧。Qpython是一个在安卓上面可以去下载安装的手机app,在应用市场或者是浏览器里面搜索一下就有很多的安装包可以去下载,但是在安装的时候需要注意的一点就是Qpython现在只能够在安卓设备上使用。
点击手机上的Qpython并进入之后就可以看到在主页有着五个选项,点击编辑器选项就能够打开python程序的代码编写界面。在这个界面的底部则是各种返回和添加注释的小工具,点击第四个图标,也就是文件的图标就能将刚刚编写好的python代码保存为py文件。
终端的作用就是和祥扰正电脑上面的一样了,可以用来谨悔去执行pip命令以及编写python代码并运行,将之前保存好的python文件路径输入进来也能够直接去运行。
而QPYPI的选项作用则是用来去下载安装python库的,它点击进去之后就可以将现在有的库给列出来。想要下载安装其他库的话就可以在搜索框里面输入搜索即可,这里的默认下载源就是pypi的官方网站,暂时没有换源的处理方法1、首先在手机控制台中输入Python代码,然后点击“Run”按钮运行慧旅。
2、其次通过“Edit”按钮来编辑Python代码,在编写代码过程耐好中需要注意字体的转换昌碧铅。
3、最后通过“pipinstall”命令来安装其他api模块即可。
4、怎么用python在oppo手机上编程 python语言应用很广泛,自己也很喜欢使用它,其实我们也可以直接在自己的安卓手机上做python开发学习,只需要简单的配置下环境就可以了。
首先我们拦轿手可以在手机上安装qpython3。
接着我们可以直接选择“终端”
在这里面我们可以直接一行一行输入执行代码简嫌。
我们也可以选择进入“编辑器”。
直接输入我们的python脚本代码。
然后点击底部的“执行”按钮,就可以运行脚本了,并输出“你好”。
我们也可以选择进入帆弯“程序”,在里面有好多的案例供我们学习使用。
点击后选择“Run”就可以执行程序,选择“open”可以查看案例的代码方便学习。
更多Python相关技术文章,请访问Python教程栏目进行学习!经查询可以知道,python可以在手机上运行,python官网 可以在手机上打开的,但是Python想要李尘在手机上运行的话只有通过已经集成好开发环境的软件,以及自己搭建虚拟环境这两种方式了。其中使用app是比较方便又简单的方法了,那下面这一篇文章就来介绍一下使用Qpython这个软件来使用手机python,往下看看吧。Qpython是一个在安卓上面可以去下载安装的手机app,在应用市场或者是浏览器里面搜索一下就有很多的安装包可以去下载,但是在安装的时候需要注意的一点就是Qpython现在只能够在安卓设备上使用。
点击手机上的Qpython并进入之后就可以看到在主页有着五个选项,点击编辑器选项就能够打开python程序的代码编写界面。在这个界面的底部则是各种返回和添加注释的小工具,点击第四个图标,也就是文件的图标就能将刚刚编写好的python代码保存为py文件。
终端的作用就是和祥扰正电脑上面的一样了,可以用来谨悔去执行pip命令以及编写python代码并运行,将之前保存好的python文件路径输入进来也能够直接去运行。
而QPYPI的选项作用则是用来去下载安装python库的,它点击进去之后就可以将现在有的库给列出来。想要下载安装其他库的话就可以在搜索框里面输入搜索即可,这里的默认下载源就是pypi的官方网站,暂时没有换源的处理方法1、首先在手机控制台中输入Python代码,然后点击“Run”按钮运行慧旅。
2、其次通过“Edit”按钮来编辑Python代码,在编写代码过程耐好中需要注意字体的转换昌碧铅。
3、最后通过“pipinstall”命令来安装其他api模块即可。步骤如下:
1、在百度或浏览器上方输入:https://f-droid/packages/com.termux/
就会进入这样的界面。
2、点进去之后、先往下滑,不要点击下载下载。F-DROID,往下拉看到下载APK的蓝色字体,点燃轿进去他就会弹出一个下载界面,即安装枣核Termux的界面。
👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。
python双十一美妆数据分析(源码+报告) 目录 python双十一美妆数据分析(源码+报告)一、绪论1.1研究背景1.2研究目的 二、数据来源及预处理2.1 准备来源2.2 数据预处理 三、数据分析过程及方法3.1 数据分析方法简介3.2 数据分析过程3.2.1 价格分布直方图3.2.2 销售前10店铺饼状图3.2.3 价格与评论数的散点图3.2.4 每日销售折线图):3.2.5 价格分布与销量柱状图 四、总结 一、绪论 1.1研究背景 在当今数字化时代,电商平台的兴起使得大众购物行为发生了深刻的变革。淘宝作为中国最大的电商平台之一,每年的双十一购物狂欢节更是成为全球关注的焦点,各类商品在这一天都迎来了爆发式的销售。本项目旨在通过对双十一淘宝美妆品类的数据进行爬取和分析,深入挖掘消费者对美妆产品的偏好、价格分布、销售趋势等方面的信息,以期为商家提供有针对性的经营策略和消费者更好的购物体验。
首先,通过爬取淘宝美妆品类的数据,能够获取大量商品的详细信息,包括但不限于商品价格、销量、店铺信息、更新时间等。这些数据不仅反映了消费者对于美妆产品的购买力和偏好,还能揭示出各个店铺在竞争中的地位和表现。通过对这些数据进行综合分析,可以更好地理解美妆市场的现状和未来发展趋势。
其次,项目还旨在通过数据可视化的手段,呈现出美妆产品的价格分布、热销店铺排名、商品价格与评论数的关系、销售随时间的变化趋势等多个维度的信息。通过直观的图表展示,不仅可以为商家提供清晰的市场洞察,还能够为消费者提供更直观、明了的购物参考,帮助其更好地选择心仪的美妆产品。
总体而言,通过深入挖掘双十一淘宝美妆数据,本项目旨在为商家提供市场竞争情报和经营建议,同时也为广大消费者提供更好的购物体验和购物参考。美妆行业是一个充满活力和竞争的市场,通过科学的数据分析,有望更好地理解市场,把握商机,促进美妆行业的可持续发展。
👇👇👇 关注公众号,回复 “美妆数据分析” 获取源码👇👇👇
1.2研究目的 本研究旨在深入探讨双十一淘宝美妆数据,通过对美妆产品的价格分布、热销店铺排名、商品价格与评论数的关系、销售随时间的变化趋势等多个维度的深度分析,旨在为商家提供更为精准的市场洞察和经营决策,同时为广大消费者提供更科学、可靠的购物参考,以促进美妆行业的可持续发展。
首先,通过对美妆产品价格分布的研究,将深入了解美妆市场的价格体系,探索不同价格区间内产品的销售情况,揭示消费者在购物时对于价格的敏感度和偏好。这有助于商家更好地定价策略,找到价格与销售之间的平衡点,提高商品的市场竞争力。
其次,通过对销量前十的店铺进行研究,将分析各店铺在美妆市场中的销售表现,揭示出哪些店铺在双十一购物狂欢节中脱颖而出,以及其成功的原因。这将为其他商家提供有益的竞争对手分析,为商家提供制定更为有效的促销和经营策略的依据。
综合而言,本研究的目的在于通过对双十一淘宝美妆数据的全面分析,为商家提供更为科学的市场洞察和经营策略,为消费者提供更为可靠的购物参考,推动美妆行业的进一步发展。通过科学的数据研究,有望更好地理解市场,把握商机,促进美妆行业的可持续发展。
二、数据来源及预处理 2.1 准备来源 数据来源: 数据集来源于淘宝美妆产品在双十一购物节期间的销售和评论数据。数据格式: 数据以CSV(逗号分隔值)格式存储,可以轻松导入到数据分析工具中进行处理。数据字段说明: 数据集包含以下字段:
update_time(更新时间): 记录产品数据的更新时间,以日期格式表示。
id(产品ID): 每个美妆产品的唯一标识符。
title(产品标题): 包含了美妆产品的名称和描述信息。
price(产品价格): 产品的价格,以人民币(RMB)为单位。
sale_count(销售数量): 产品的销售数量,表示已售出的产品数量。
comment_count(评论数量): 产品收到的评论数量。
店名(店铺名称): 销售该美妆产品的店铺名称。 数据样本:
代码主要用于数据的导入和准备,其中的数据文件位于指定的文件路径双十一淘宝美妆数据\双十一淘宝美妆数据.csv。通过使用Python中的Pandas库中的pd.read_csv()函数,能够轻松地将CSV格式的数据读取到程序中进行后续的分析和处理。
👇👇👇 关注公众号,回复 “美妆数据分析” 获取源码👇👇👇
2.2 数据预处理 数据预处理是数据分析过程中的重要步骤,旨在清洗和准备原始数据,以使其适合后续的分析和建模工作。下面解释了上述代码中的数据预处理过程:
去重处理 (data.drop_duplicates(inplace=True)): 去重处理是为了删除数据集中的重复记录。在实际数据采集和整理中,常常会出现同一数据被多次记录的情况,这可能会导致分析结果的偏误。通过使用drop_duplicates()方法,代码会检查数据集中的每一行,如果发现有两行或多行数据内容完全相同的情况,就会删除其中的重复行。inplace=True参数表示在原始数据上进行修改,而不是创建一个新的数据副本。
处理缺失值 (data.
一、pywebview 官网:https://pywebview.flowrl.com/
1、简介 pywebview声称Build GUI for your Python program with JavaScript, HTML, and CSS。就是可以使用web技术来实现桌面应用程序开发。其内核我理解仍然是浏览器,只不过将浏览器封装成系统窗口,这样就可以将web无缝切换到桌面应用,相比pyQt等重武器还是比较方便的。
对于目前比较火的electron,Python的加入给应用程序提供了上限,据说打包的大小也比electron小。
2、安装 pip install pywebview Hello world 的demo:
import webview webview.create_window('Hello world', 'https://pywebview.flowrl.com/') webview.start() 3、依赖 windows程序依赖pythonnet(要求 > .NET 4.0),pythonnet可以让python调用.NET代码。
为了使用最新版本的 Chromium(Chromium是谷歌的开源项目,国产的所有 “双核浏览器”,都是基于 Chromium 开发的,甚至 Chrome 也是基于它。),需要安装WebView2。
选择Web应用还是原生应用来开发是一种在通用性和本地权限之前的权衡。WebApp兼容的范围很广,而且Web前端代码基于浏览器天生跨平台,而且前端框架多好开发。而原生应用有很大本地权限,可以进行各种文件和操作系统接口的调用。WebView可以结合这两者的优点进行开发。WebView2允许你在本地App里面嵌入web相关的技术(例如HTML,CSS和JavaScript)。WebView2控件使用微软的Edge作为渲染引擎,你可以嵌入一部分或者整个App都用WebView来做。
WebView2下载地址:https://developer.microsoft.com/en-us/microsoft-edge/webview2/?form=MA13LH
4、使用 4.1、最简单示例 import webview window = webview.create_window('Woah dude!', 'https://pywebview.flowrl.com') webview.start() create_window:
返回窗口实例,该实例可以使用许多窗口操作和DOM函数,可创建任意数量窗口,在GUI循环启动后创建的窗口会立即显示。所有打开的窗口都以列表形式存储在webview.windows中。create_window第二个参数可以是url(远程url或本地url),也可设置html来加载html。html与url同时存在,html优先级高。
4.2、http server示例 pywebview提供一个与WSGI兼容的http服务器。
import webview webview.create_window('Woah dude!', 'index.html') webview.start(http_server=True) 将http_server设为true
一般使用外部WSGI兼容的http服务器,将服务器对象作为url传递
from flask import Flask import webview server = Flask(__name__, static_folder='.
文章目录 WebService1.简单介绍WebService1.1. 类型1.2. 架构1.3. 主要特点1.4. 使用场景1.5. Web服务标准和技术 2.案例-WebServiceDemo2.1.引入配置文件2.2.创建接口2.3.创建接口实现类2.4.创建WebService配置类2.5.测试 WebService Web服务(Web Services)是一种基于网络的标准化的软件系统,允许不同的应用程序通过网络相互通信和交互。它们使用标准化的网络协议和数据格式,使得不同平台、不同语言编写的应用程序能够互相通信和交换数据。
在现代软件开发中,构建可靠的Web服务是至关重要的。Apache CXF是一个功能强大的Java框架,用于构建Web服务和Web应用程序。结合Spring Boot,我们可以快速搭建一个简单的WebService。本文将介绍如何使用Apache CXF和Spring Boot创建一个简单的WebService,并进行基本的测试。
1.简单介绍WebService 1.1. 类型 Web服务通常分为两种主要类型:
SOAP Web服务:基于SOAP(Simple Object Access Protocol)协议的Web服务。SOAP是一种用于交换结构化信息的协议,它使用XML作为消息格式,并通常通过HTTP协议进行传输。RESTful Web服务:基于REST(Representational State Transfer)原则的Web服务。RESTful服务使用标准的HTTP方法(如GET、POST、PUT、DELETE)来执行操作,并通常返回JSON或XML格式的数据。 1.2. 架构 Web服务的架构通常包括以下关键组件:
服务提供者(Service Provider):提供Web服务的实体。它们发布服务并处理来自客户端的请求。服务请求者(Service Requestor):使用Web服务的客户端应用程序。它们向服务提供者发送请求并处理响应。服务描述(Service Description):Web服务的描述文件,通常使用WSDL(Web Services Description Language)或OpenAPI等格式来描述服务的接口和操作。消息格式(Message Format):Web服务使用的数据交换格式,通常是XML或JSON。通信协议(Communication Protocol):Web服务之间通信的协议,常见的包括HTTP、HTTPS、SMTP等。 1.3. 主要特点 Web服务具有以下主要特点:
跨平台性(Platform Independence):由于Web服务使用标准化的协议和数据格式,因此它们可以在不同的平台和操作系统上运行。松耦合(Loose Coupling):Web服务通过标准化接口进行通信,服务提供者和请求者之间的耦合度较低,可以独立开发和部署。可组合性(Composability):可以通过组合多个Web服务来创建复杂的应用程序。可重用性(Reusability):Web服务可以被多个应用程序重复使用,从而提高了软件开发效率。易于维护(Maintainability):由于Web服务使用标准化的接口和协议,因此易于维护和更新。 1.4. 使用场景 Web服务在许多场景下都得到了广泛应用,包括但不限于:
企业应用集成(Enterprise Application Integration,EAI):将不同的企业应用程序和系统集成在一起,实现数据和业务流程的无缝交互。分布式系统:构建分布式系统和服务导向架构(Service-Oriented Architecture,SOA),提供跨网络的服务和资源共享。移动应用程序开发:通过Web服务为移动应用程序提供数据和功能支持,与后端服务器进行通信和交互。云计算:在云平台上部署和管理Web服务,提供云端服务和资源。 1.5. Web服务标准和技术 一些常见的Web服务标准和技术包括:
SOAP(Simple Object Access Protocol):用于构建基于XML的Web服务的协议。WSDL(Web Services Description Language):用于描述Web服务的接口和操作的XML格式的语言。UDDI(Universal Description, Discovery, and Integration):用于注册和发现Web服务的协议和规范。REST(Representational State Transfer):一种基于HTTP协议的软件架构风格,用于构建RESTful Web服务。JSON(JavaScript Object Notation):一种轻量级的数据交换格式,通常用于RESTful Web服务的数据格式。 2.
文章目录 关系运算关系代数基本关系代数运算选择投影并差笛卡尔积重命名 附加关系代数运算交连接赋值除 扩展关系代数运算去重广义投影聚集分组排序 ==总结== 元组关系演算域关系演算 关系运算 关系运算包含 关系代数(relational algebra):关系代数是一种过程化查询语言,通过描述对关系的运算来表达查询、获取数据关系演算:非过程化查询语言,通过描述想要获取的数据的信息来获取数据(不需要给出运算过程) 关系演算可以分为元组关系演算和域关系演算两种语言 为了方便用户查询处理关系数据,定义了结构化查询语言SQL 来操作处理关系数据 关系代数 关系代数定义了一个关系数据的运算的集合关系运算以一个或者两个关系为输入;输出一个新的关系作为运算结果关系是一个以元组为元素的多重集合(multiset):可能包含重复元素关系代数运算本质上是对多重集合的运算 基本关系代数运算 包括选择、投影、并、差、笛卡尔积和重命名(期中,选择、投影、重命名为一元运算,并、差、笛卡尔积为二元运算)
基本关系代数运算可以用来表达任何传统关系代数运算
选择 选择运算 σ \sigma σ可以从关系 R R R中获取满足条件的元组:
σ p ( R ) = { t ∣ t ∈ R ∧ p ( t ) = True } \sigma_p(R)=\{t\mid t\in R\land p(t)=\text{True}\} σp(R)={t∣t∈R∧p(t)=True}
p p p为选择谓词:
p p p是由逻辑运算符与 ∧ \land ∧、或 ∨ \lor ∨、非 ¬ \lnot ¬连接的若干原子表达式构成的公式原子表达式的形式为: X □ Y X\ \Box \ Y X □ Y X , Y X,Y X,Y:属性名、常量,或者函数值 □ \Box □为比较运算符,包括 = > < ≠ ≤ ≥ =\ >\ <\ \neq\ \leq\ \geq = > < = ≤ ≥ 投影 投影运算 Π \Pi Π可以从关系 R R R中获取某些列组成新的关系:
力扣上有许多数据结构及算法的练习,但是如果由第一题【两数之和】开始刷,会让50%的人倒在起点。所以我们刷题要讲究路线攻略以及技巧~
大体路线方向由简入难 数学数组链表字符串哈希表双指针递归栈队列树图与回溯算法贪心动态规划 刷题技巧 建议刷题的时候分成四轮来刷,不用想着第一次就把单个分类的全部刷完。
第一轮:
按照 数学 > 数组 > 链表 > 字符串 > 哈希表 > 双指针 > 递归 >栈 >队列 的顺序,主要刷:难度简单,通过率在 50%以上的题目。
第二轮:
按照 数学 > 数组 > 链表 > 字符串 > 哈希表 > 双指针 > 递归 >栈 >队列的顺序,主要刷:难度中等,通过率在50%以上的题目
第三轮:
先不要急着刷题,建议找个视频,把相关算法理论看一遍,比如:什么是分治,什么是贪心,什么是动态规划,什么是二叉搜索树,什么是图等概念。
再把树 > 图与回溯算法 >贪心 >动态规划这些刷一遍,刷的时候还是刷简单或者中通过率 50%以上的题目
第四轮:
第四轮就比较难了,可以刷剩余困难的,还有以前没刷的,通过率低于 40%的题目。但是这一轮会非常的难,难以坚持下去。
#题号 数学相关算法题
2469、2235、2413、2160、2520、1688、1281、2427、728、2119、509、70、
372、7、479、564、231、342、326、504、263、190、191、476、461、477、50、:693、393、172、458、258、319、405、171、168、670、233、357、400
数组相关算法题
2011、1929、1720、2574、1cp01、lcp06、1365、1732、1464、2496、1979、485、495、414、628、645、697、448、442、41、274、453、665、283、118、119、661、598、419、189、396、54、59、498、566、48、73、289、303、304、238
三,链表相关算法题
206、203、237、19、430、61、24、、92、25、2、445、21、23
四,字符串
520、125、14、34、58、344、541、557、151、387、389、383、242、49、451、3、、8..13、22、293、3、不8、32、824、号2、83、86、 7、218. 43、 306423、657、551、696、482、6、68、28、686、459、214、5、647
五,哈希表
633、349、128、202、500、290、532、205、166、466、138、1、167、599、219.217、220350、554、609、454、18、560、523、525、594、
六,双指针
345、680、167、15、16、18、11、42、27、26、80、83、82、611、187643、674、209、3、438、567、424、76、30、86、328、160、88、475、141、142、143234、457、287
扩散模型代码详细解读 代码地址:denoising-diffusion-pytorch/denoising_diffusion_pytorch.py at main · lucidrains/denoising-diffusion-pytorch (github.com)
前向过程和后向过程的代码都在GaussianDiffusion这个类中。
有问题可以一起讨论!
常见问题解决 Why self-conditioning? · Issue #94 · lucidrains/denoising-diffusion-pytorch (github.com)
"pred_x0" preforms better than "pred_noise" · Issue #58 · lucidrains/denoising-diffusion-pytorch (github.com)
What is objective=pred_x0 and how do you use it? · Issue #34 · lucidrains/denoising-diffusion-pytorch (github.com)
Conditional generation · Issue #7 · lucidrains/denoising-diffusion-pytorch (github.com)
Questions About DDPM · Issue #10 · lucidrains/denoising-diffusion-pytorch (github.com)
The difference between pred_x0, pred_v, pred_noise three objectives · Issue #153 · lucidrains/denoising-diffusion-pytorch (github.
好不容易学生认证通过了,打开vscode用copilot结果一直报这个错误。我的原因是:还未给copilot授权, 通过了学生认证后要进入这里进行授权: