实操经验 | Apache 基金会顶级项目版本管理和发布流程

news2024/11/14 22:06:47

前言

前段时间,Apache SeaTunnel经过几个月的迭代和架构升级,终于迎来第一个正式2.3.0版本,我也有幸作为本次的Release Manager,体验了一把从0到1的Apache发版流程,不得不说Apache基金会在项目的版本管理这块有着完善的规范和严谨的流程,整个发版过程周期很长,其中也踩了不少的坑,俗话说好记性不如烂笔头,所以笔者写了一篇文章来记录整个过程(以Apache SeaTunnel为例),希望这篇文章能够让小白快速入门Apache项目版本管理和发布。

Tips: Release Manager需要有Apache LDAP账号,也就意味着你需要首先成为项目的Committer才有资格

环境准备

GIT

用于clone项目源代码到本地

GPG

用于生成数字签名,为你的每一次操作留下痕迹

SHASUM

用于为文件生成签名

SVN

用于拉取Apache Release SVN仓库

MAVEN

用于编译项目

物料准备

配置GPG KEY

新建key
gpg --gen-key
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: 已创建目录‘/home/hadoop/.gnupg’
gpg: 新的配置文件‘/home/hadoop/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/hadoop/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/home/hadoop/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/home/hadoop/.gnupg/pubring.gpg’已建立
请选择您要使用的密钥种类:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (仅用于签名)
   (4) RSA (仅用于签名)
您的选择? 1
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)4096
您所要求的密钥尺寸是 4096 位
请设定这把密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 0
密钥永远不会过期
以上正确吗?(y/n)y

如上所示,选择项分别为:

  • 1
  • 4096
  • 0
  • y
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

真实姓名:tyrantlucifer
电子邮件地址:tyrantlucifer@apache.org
注释:The key of Apache SeaTunnel
您选定了这个用户标识:
    “tyrantlucifer (The key of Apache SeaTunnel) <tyrantlucifer@apache.org>”

更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?o
您需要一个密码来保护您的私钥。

如上所示,你需要为这个key指定个人信息以及加密密码,需要填写

  • 姓名
  • 邮箱(Apache邮箱)
  • key注释
  • 密码(很重要,不要忘记,要记住哟

file

我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
gpg: 密钥 0983DF85 被标记为绝对信任
公钥和私钥已经生成并经签名。

gpg: 正在检查信任度数据库
gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性:  1 已签名:  0 信任度:0-,0q,0n,0m,0f,1u
pub   4096R/0983DF85 2022-12-28
密钥指纹 = AE63 FC40 ECCD 600D 724B  5625 05FD AE73 0983 DF85
uid                  tyrantlucifer (The key of Apache SeaTunnel) <tyrantlucifer@apache.org>
sub   4096R/B7023D46 2022-12-28
验证key
gpg --list-keys
/home/hadoop/.gnupg/pubring.gpg
-------------------------------
pub   4096R/0983DF85 2022-12-28
uid                  tyrantlucifer (The key of Apache SeaTunnel) <tyrantlucifer@apache.org>
sub   4096R/B7023D46 2022-12-28

Tips: 0983DF85就是你的公钥缩写

上传key到公共服务器
gpg --keyserver keyserver.ubuntu.com --send-key 0983DF85
验证key是否正常上传
  1. 命令行验证
gpg --keyserver keyserver.ubuntu.com --search-keys 0983DF85
  1. 网站验证

    OpenPGP Keyserver (ubuntu.com)

file

file

Tips: 该截图是我之前已经上传好的key,和上一步骤生成的key不一致是正常的

配置maven

创建主密码
mvn --encrypt-master-password <apache password>
新建文件~/.m2/settings-security.xml
<settingsSecurity>
    <master><!-- 这里填入上一步输出的密码 --></master>
</settingsSecurity>
加密Apache LDAP 密码
mvn --encrypt-password <apache password>
新增配置

编辑你本地maven环境的配置文件,一般路径为~/.m2/setting.xml,添加

<settings>
  <servers>
    <server>
      <id>apache.snapshots.https</id>
      <username> <!-- APACHE LDAP USERNAME --> </username>
      <password> <!-- APACHE LDAP ENCRYPTED PASSWORD,上一步加密的密码 --> </password>
    </server>
    <server>
      <id>apache.releases.https</id>
      <username> <!-- APACHE LDAP USERNAME --> </username>
      <password> <!-- APACHE LDAP ENCRYPTED PASSWORD,上一步加密的密码 --> </password>
    </server>
    <server>
        <id>gpg.passphrase</id>
        <passphrase><!-- GPG KEY PASSWORD --></passphrase>
    </server>
  </servers>
</settings>

项目版本准备

分支准备

mkdir -p ~/seatunnel-release-prepare
cd ~/seatunnel-release-prepare
git clone git@github.com:apache/seatunnel.git
cd seatunnel
git checkout -b ${RELEASE.VERSION}-release

更新release-note

vim release-note.md
git add release-note.md
git commit -m "[Release][${RELEASE.VERSION}][release-note] Add release-note"
git push

预编译测试

mvn release:prepare -Prelease -Darguments="-DskipTests" -DdryRun=true -Dusername=${GITHUB USERNAME}

编译

mvn release:clean
mvn release:prepare -Prelease -Darguments="-DskipTests" -DpushChanges=false -Dusername=${GITHUB USERNAME}

提交代码

git push
git push origin --tags

部署jar包

  1. 上传jar包
mvn release:perform -Prelease -Darguments="-DskipTests" -Dusername=${GITHUB USERNAME}
  1. 关闭stage仓库

    https://repository.apache.org/#stagingRepositories

file

上传SVN

拉取release和dev仓库到本地

mkdir -p ~/seatunnel-release-prepare/dev
mkdir -p ~/seatunnel-release-prepare/release
cd ~/seatunnel-release-prepare/dev
svn --username=${APACHE LDAP username} co https://dist.apache.org/repos/dist/dev/seatunnel
cd ~/seatunnel-release-prepare/release
svn --username=${APACHE LDAP username} co https://dist.apache.org/repos/dist/release/seatunnel

上传key到dev和release仓库

Tips: 只有第一次发版的Release Manager才需要做这一步

cd ~/seatunnel-release-prepare/dev/seatunnel
gpg -a --export ${GPG USERNAME} >> KEYS
svn add KEYS
svn --username=${APACHE LDAP USERNAME} commit -m "Add ${APACHE LDAP USERNAME} GPG key"
cd ~/seatunnel-release-prepare/release/seatunnel
gpg -a --export ${GPG USERNAME} >> KEYS
svn add KEYS
svn --username=${APACHE LDAP USERNAME} commit -m "Add ${APACHE LDAP USERNAME} GPG key"

上传源码包和二进制包到dev仓库

  1. 复制源码包和二进制包

     mkdir -p ~/seatunnel-release-prepare/dev/${RELEASE.VERSION}
     cp -f ~/seatunnel-release-prepare/seatunnel/seatunnel-dist/target/*.tar.gz ~/seatunnel-release-prepare/dev/${RELEASE.VERSION}
     cd ~/seatunnel-release-prepare/dev/${RELEASE.VERSION}
  2. 生成签名

     shasum -a 512 apache-seatunnel-${RELEASE.VERSION}-src.tar.gz >> apache-seatunnel-${RELEASE.VERSION}-src.tar.gz.sha512
     shasum -b -a 512 apache-seatunnel-${RELEASE.VERSION}-bin.tar.gz >> apache-seatunnel-${RELEASE.VERSION}-bin.tar.gz.sha512
  3. 生成GPG签名

     gpg --armor --detach-sig apache-seatunnel-${RELEASE.VERSION}-src.tar.gz
     gpg --armor --detach-sig apache-seatunnel-${RELEASE.VERSION}-bin.tar.gz
  4. 检查文件签名

     shasum -c apache-seatunnel-${RELEASE.VERSION}-src.tar.gz.sha512
     shasum -c apache-seatunnel-${RELEASE.VERSION}-bin.tar.gz.sha512
  5. 检查数字签名

    1. 导入(Release Manager不需要做这一步)

      curl https://dist.apache.org/repos/dist/dev/seatunnel/KEYS >> KEYS
      gpg --import KEYS
      gpg --edit-key "${GPG username of releaser}"
        > trust
      
      Please decide how far you trust this user to correctly verify other users' keys
      (by looking at passports, checking fingerprints from different sources, etc.)
      
        1 = I don't know or won't say
        2 = I do NOT trust
        3 = I trust marginally
        4 = I trust fully
        5 = I trust ultimately
        m = back to the main menu
      
      Your decision? 5
      
        > save
    2. 检查gpg数字签名

      gpg --verify apache-seatunnel-${RELEASE.VERSION}-src.tar.gz.asc apache-seatunnel-${RELEASE.VERSION}-src.tar.gz
      gpg --verify apache-seatunnel-${RELEASE.VERSION}-seatunnel-bin.tar.gz.asc apache-seatunnel-${RELEASE.VERSION}-seatunnel-bin.tar.gz
  6. 提交所有文件至dev仓库

     svn add *
     svn --username=${APACHE LDAP USERNAME} commit -m "release ${RELEASE.VERSION}"

邮件发起投票

dev@seatunnel.apache.org投票

发起投票
[VOTE] Release Apache SeaTunnel 2.3.0

Hello SeaTunnel Community,

This is a call for vote to release Apache SeaTunnel () version 2.3.0

Release notes:
https://github.com/apache/seatunnel/blob/2.3.0/release-note.md

The release candidates:
https://dist.apache.org/repos/dist/dev/seatunnel/2.3.0 

Git tag for the release:
https://github.com/apache/seatunnel/tree/2.3.0

Maven 2 staging repository:
https://repository.apache.org/content/repositories/orgapacheseatunnel-1015/org/apache/seatunnel/

Release Commit ID:
https://github.com/apache/seatunnel/commit/d7280abbe9e72262640836182a7f090a5706988a

Keys to verify the Release Candidate: 
https://downloads.apache.org/seatunnel/KEYS

The vote will be open for at least 72 hours or until necessary numbers of votes are reached.

Please vote accordingly:

[ ] +1 approve

[ ] +0 no opinion

[ ] -1 disapprove with the reason

Checklist for reference:

[ ] Download links are valid.

[ ] Checksums and PGP signatures are valid.

[ ] Source code artifacts have correct names matching the current release.

[ ] LICENSE and NOTICE files are correct for each SeaTunnel repo.

[ ] All files have license headers if necessary.

[ ] No compiled archives bundled in source archive.

More detail checklist please refer:
https://cwiki.apache.org/confluence/display/Release+Checklist


--

Best Regards
Chao Tian
关闭投票
[VOTE] Release Apache SeaTunnel() 2.3.0

Hi SeaTunnel Community,

Thanks, everyone, I will close this vote thread and the results will be tallied.

Best wishes!
Chao Tian
归票
[RESULT] [VOTE] Release Apache SeaTunnel() 2.3.0

Hi SeaTunnel community,

This vote now closes since 72 hours have passed.

The vote PASSES with

3 (+1 binding) votes from the IPMC,
David,
Guo Wei,
Calvin Kirs  

6 (+1 non-binding) votes from the developer from the community

Jun Gao, 
TaoZex, 
hailin0,
Peng Yuan,
Zongwen Li,
Guangdong Liu
and no further 0 or -1 votes.


The vote thread: 

https://lists.apache.org/thread/98oc6q6vghlg8qpfyf5yttzy925tfp9g 


Thanks for your participation, I will now bring the vote to
[general@apache.org](mailto:general@apache.org) <mailto:
[general@apache.org](mailto:general@apache.org)> to get
approval by the IPMC.
If this vote passes also, the release is accepted and will be published.

Best wishes,
Chao Tian

general@apache.org投票

发起投票
[VOTE] Release Apache SeaTunnel() 2.3.0

Hello IPMC, This is an official vote for the Apache
SeaTunnel() 2.3.0  that we have been working toward.

To learn more about Apache SeaTunnel(), please see:

https://seatunnel.apache.org

The Apache SeaTunnel () community has voted and approved the release.

Vote thread:

https://lists.apache.org/thread/98oc6q6vghlg8qpfyf5yttzy925tfp9g

Result thread:

https://lists.apache.org/thread/6c0463dsoh8r0gmvqo67lttgy4o40xst

Release changes:

https://github.com/apache/seatunnel/blob/2.3.0/release-note.md

The release candidates:

https://dist.apache.org/repos/dist/dev/seatunnel/2.3.0

Maven 2 staging repository:

https://repository.apache.org/content/repositories/orgapacheseatunnel-1015/org/apache/seatunnel/

Git tag for the release:

https://github.com/apache/seatunnel/tree/2.3.0

Release Commit ID:

https://github.com/apache/seatunnel/commit/d7280abbe9e72262640836182a7f090a5706988a

Keys to verify the Release Candidate:

https://downloads.apache.org/seatunnel/KEYS

GPG user ID:

tyrantlucifer

The vote will be open for at least 72 hours or until necessary numbers
of votes are reached.

Please vote accordingly:

[ ] +1 approve
[ ] +0 no opinion
[ ] -1 disapprove with the reason

Checklist for reference:

[ ] Download links are valid.
[ ] Checksums and PGP signatures are valid.
[ ] DISCLAIMER is included.
[ ] Source code artifacts have correct names matching the current release.
[ ] LICENSE and NOTICE files are correct for each SeaTunnel repo.
[ ] All files have license headers if necessary.
[ ] No compiled archives bundled in source archive.

More detail checklist please refer:
https://cwiki.apache.org/confluence/display/Release+Checklist

The following votes are carried over from the SeaTunnel dev mailing list:

+1(binding)
David,
William-Guowei,
Calvin Kirs

Best Regards,
Chao Tian
关闭投票
[VOTE] Release Apache SeaTunnel() 2.3.0

Hi IPMC,

Thanks, everyone, I will close this vote thread and the results will be tallied.

Best wishes!
Chao Tian
归票
[RESULT] [VOTE] Release Apache SeaTunnel() 2.3.0

Hi SeaTunnel community,

This vote now closes since 72 hours have passed.

The vote PASSES with

3 (+1 binding) votes from the IPMC,
David,
Guo Wei,
Calvin Kirs  

6 (+1 non-binding) votes from the developer from the community

Jun Gao, 
TaoZex, 
hailin0,
Peng Yuan,
Zongwen Li,
Guangdong Liu
and no further 0 or -1 votes.


The vote thread: 

https://lists.apache.org/thread/98oc6q6vghlg8qpfyf5yttzy925tfp9g 


Thanks for your participation, I will now bring the vote to
[general@apache.org](mailto:general@apache.org) <mailto:
approval by the IPMC.
If this vote passes also, the release is accepted and will be published.

Best wishes,
Chao Tian

正式发版

从dev仓库移动文件至release仓库

svn mv https://dist.apache.org/repos/dist/dev/seatunnel/${RELEASE.VERSION} https://dist.apache.org/repos/dist/release/seatunnel/

发布maven仓库

file

发送通知邮件

dev@seatunnel.apache.org

Hi all,

We are glad to announce the release of Apache SeaTunnel() ${RELEASE.VERSION}.

Once again I would like to express my thanks to your help.

SeaTunnel: SeaTunnel() is a distributed, high-performance data integration platform for the synchronization and transformation of massive
data (offline & real-time).

Apache SeaTunnel() website: 

http://seatunnel.apache.org/

Downloads: 

https://seatunnel.apache.org/download/

Release Notes:

https://github.com/apache/seatunnel/blob/${RELEASE.VERSION}/release-note.md

Documents: 

https://seatunnel.apache.org/docs/${RELEASE.VERSION}/intro/about

Twitter: 

https://twitter.com/ASFSeaTunnel

SeaTunnel() Resources:
- GitHub: https://github.com/apache/seatunnel
- Issue: https://github.com/apache/seatunnel/issues
- Mailing list: dev@seatunnel.apache.org

- Apache SeaTunnel() Team

总结

作为一名Apache Release Manager需要做的前期准备工作有很多且很繁琐,需要更多的耐心和细心,由于所有的仓库都在国外,任何一个步骤都会可能因为网络延迟而失败,但不要因此气馁,唯有不断的尝试才能走向最终的胜利,希望本篇文章能够帮助到初次发版的Release Manager,让大家少走弯路。

本文由 白鲸开源科技 提供发布支持!

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

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

相关文章

从报名到领证:软考中级系统集成项目管理工程师考试全流程指南

本文共计11564字&#xff0c;预计阅读38分钟。包括七个篇章&#xff1a;报名、准考证打印、备考、考试、成绩查询、证书领取及常见问题。 一、报名篇 报名条件要求&#xff1a; 1.凡遵守中华人民共和国宪法和各项法律&#xff0c;恪守职业道德&#xff0c;具有一定计算机技术…

数字化转型的内容框架解析,附华为数字化转型内容框架及方法论

数字化转型的内容框架是一个系统性、多维度的体系&#xff0c;旨在通过数字技术的融入和应用&#xff0c;对传统业务、流程和模式进行重构、升级&#xff0c;以提升效率、创造更多价值。以下是对数字化转型内容框架的详细阐述&#xff1a; 一、总体要求 数字化转型的总体要求…

07:为电源和GND分配网络颜色

1.创建电源类和GND类 2为电源和GND分配颜色

Pyqt5高级技巧2:Tab顺序、伙伴快捷键、各类常用控件的事件(含基础Demo)

一、编辑Tab顺序 点击下面这个按钮后&#xff0c;按控件调整tab的顺序&#xff0c;设置好后&#xff0c;鼠标聚焦在输入框1中&#xff0c;按一下tab鼠标聚焦会跳到下一个输入框中 编辑tab结束后&#xff0c;按下面这个按钮重新返回页面布局 二、编辑伙伴 &#xff08;删除伙伴…

会声会影和剪映哪个好?会声会影和剪映对比详解,视频剪辑软件推荐

随着社交媒体和网络视频的发展&#xff0c;在线视频编辑工具也变得越来越受欢迎。在视频编辑软件中&#xff0c;会声会影和剪映都是非常受欢迎的选择。它们都具有用户友好的界面和强大的功能&#xff0c;可以满足不同用户的需求。那么&#xff0c;哪一个软件更好呢&#xff1f;…

【OpenCV】初步认识 OpenCV

文章目录 1. OpenCV 简介 1. OpenCV 简介 &#x1f427;OpenCV是应用广泛的开源图像处理库。OpenCV用C语言编写&#xff0c;它具有C、Java、Pyhthon等接口&#xff0c;并支持Windows、Linux、Android&#xff0c;OpenCV主要倾向于实时视觉应用领域。 OpenCV应用领域&#xff1…

华为云征文|部署内容管理系统 Joomla

华为云征文&#xff5c;部署内容管理系统 Joomla 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 应用场景1.3 核心竞争力 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Joomla3.1 Joomla 介绍3.2 Docker 环境搭建3.3 Joomla 部署3.4 Joom…

谈一谈JVM的GC(垃圾回收)

JVM&#xff08;Java Virtual Machine&#xff09;的GC&#xff08;Garbage Collection&#xff0c;垃圾回收&#xff09;是Java语言的一个重要特性&#xff0c;它负责自动管理内存&#xff0c;释放那些不再被使用的对象所占用的内存空间。以下是对JVM GC的详细介绍&#xff1a…

Nginx: 使用KeepAlived配置实现虚IP在多服务器节点漂移及Nginx高可用原理

使用KeepAlived配置实现虚IP在多服务器节点漂移 1 &#xff09;环境准备 2台 linux , 一主一备 节点1&#xff1a;192.168.184.30 CentOS 7 Master节点2&#xff1a;192.168.184.40 CentOS 7 BackupVIP 192.168.184.50 安装 KeepAlived, $ yum install keepalived 注意&#x…

前端源码解读:前端小白也能轻松理解的axios源码

作为前端开发的小伙伴&#xff0c;你肯定对 axios 这个超级好用的 HTTP 请求库不陌生吧&#xff1f;它不仅操作简单&#xff0c;功能还特别强大&#xff0c;难怪大家都爱用&#xff01;但你知道吗&#xff1f;axios 的魅力可不仅仅在于它的好用&#xff0c;真正让人佩服的是它源…

jmeter 响应乱码

Jmeter在做接口测试的时候的&#xff0c;如果接口响应的内容中有中文&#xff0c;jmeter的响应内容很可能显示乱码&#xff0c;为了规避这种出现乱码的问题&#xff0c;就要对jmeter的响应结果进行编码处理。 打开jmeter进行接口、压力、性能等测试&#xff0c;出现以下乱码问…

[Algorithm][综合训练][体育课测验(二)][合唱队形][宵暗的妖怪]详细讲解

目录 1.体育课测验(二)1.题目链接2.算法原理详解 && 代码实现 2.合唱队形1.题目链接2.算法原理详解 && 代码实现 3.宵暗的妖怪1.题目链接2.算法原理详解 && 代码实现 1.体育课测验(二) 1.题目链接 体育课测验(二) 2.算法原理详解 && 代码实现…

数据结构-队列的介绍及循环队列

1.队列的概念 在开始前&#xff0c;请牢记这句话&#xff1a;队列是一个先进先出的数据结构。 队列&#xff08;queue&#xff09;是限定在表的一端进行插入&#xff0c;表的另一端进行删除的数据结构&#xff0c;如同栈的学习&#xff0c;请联系前文所学链表&#xff0c;试想…

python 安装

下载 Download Python | Python.org 安装

jquery下载的例子如何应用到vue中

参考测试圈相亲平台开发流程&#xff08;4&#xff09;&#xff1a;选个漂亮的首页 (qq.com) 下载的文件夹解压到v_love项目的pubilc下的static文件夹内&#xff0c;这里放的都是我们的静态资源。 打开文件夹内的index.html&#xff0c;我们先确定下它是不是我们要的东西&…

产品经理的学习笔记(全集)-持续更新

1.前言 产品经理不是一个软件&#xff0c;也不是一个专业技能&#xff0c;是一个思维量变的过程&#xff1b;内容介绍&#xff1a;P1-产品经理基础认知&#xff1b;P2-从0-1搭建实战项目&#xff08;电商&#xff09; 2.产品经理基础 2.1产品经理定义 产品管理--产品的设计…

求职Leetcode题目(9)

1.通配符匹配 题解&#xff1a; 其中&#xff0c;横轴为string s&#xff0c;纵轴为pattern p 这个表第(m,n)个格子的意义是:【p从0位置到m位置】这一整段&#xff0c;是否能与【s从0位置到n位置】这一整段匹配 也就是说&#xff0c;如果表格的下面这一个位置储存的是T(True)…

SprinBoot+Vue学生选课小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…

Ubuntu 24.04 VMware里面设置静态ip上网

1.VMware里面设置网络为桥接模式 2.Ubuntu里面检查网卡名称 [~] ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:…

python图像类型分类汇总

图型所在包样例例图热图seabornimport matplotlib.pyplot as plt import seaborn as sns sns.heatmap(df.isnull()) plt.show() Bitmap Bitmap import numpy as np # 获取数据 fraud data_df[data_df[Class] 1] nonFraud data_df[data_df[Class] 0] # 相关性计算 cor…