当前位置: 首页 > news >正文

单细胞转录组 —— kb-python 原始数据处理

单细胞转录组 —— kb-python 原始数据处理

前言

kallisto|bustools 是一种用于预处理 scRNA-seq 数据的工作流程。

数据预处理步骤包括:

  1. reads 与其来源细胞关联起来;
  2. 根据唯一分子标识符(UMI)对 reads 进行去重;
  3. reads 中生成基因或特征计数,以生成 细胞x基因 矩阵。

使用 kallisto|bustools 有以下几点优势

  • 生成与 细胞x基因细胞x转录本 等价的计数矩阵
  • 执行 RNA 速率分析和 snRNA-seq 分析
  • 10xinDropsDropseq 等多种技术的数据进行定量。
  • 为新技术和方案定制工作流程。
  • 处理特征条码数据,如 CITE-seqREAP-seqMULTI-seqClicktagsPerturb-seq
  • 生成 QC 报告
  • 速度飞快

使用

kb-python 是一个用于处理 scRNA 序列的 python 软件包,它封装了 kallisto|bustools 单细胞 RNA 分析流程。

可以使用 pip 安装

pip install kb-python

也可以使用 conda 安装

conda install -c bioconda kb-python

或者安装开发版

pip install git+https://github.com/pachterlab/kb_python

命令行输入 kb,输出类似如下信息

usage: kb [-h] [--list] <CMD> ...kb_python 0.28.2positional arguments:<CMD>info      Display package and citation informationcompile   Compile `kallisto` and `bustools` binaries from sourceref       Build a kallisto index and transcript-to-gene mappingcount     Generate count matrices from a set of single-cell FASTQ filesoptional arguments:-h, --help  Show this help message and exit--list      Display list of supported single-cell technologies

主要包含 4 个子命令,我们主要使用后两个。

构建索引

可通过 ref 子命令,使用 kallisto 建立转录组索引。只需传入参考基因组和基因组注释文件即可。

重要参数如下

流程主要包含 4 种类型,默认是 standardRNA 速率分析用 nackite 主要用于 Feature Barcode 测序,如 10x Feature Barcode 技术可以同时分析基因表达和免疫受体序列(BCRTCR)。

也可以使用 custom 模式,定制自己的参考基因组索引。

定量

重要参数如下

kb-python 支持的单细胞技术可以使用下面的命令查看

kb --list

其中,后三列的数字代表索引位置信息:文件索引(0 表示 R1), 起始位置, 结束位置。如果为 None,说明整个文件都是。

例如,10XV2 表示 10xV2 版,barcodeUMI 都在 R1 中,前 16 位为 barcode 序列,后 10 位为 UMI 序列,R2 都是 cDNA 序列

实战

10x scRNA-seq

我们以昨天的数据为例,使用 kb-python 来进行原始数据的处理

创建参考基因组的索引,使用 standard 模式

kb ref -i mm10.standard.idx -g t2g.txt \-f1 cdna.fa -f2 intron.fa \--workflow standard \mm10.fa \mm10.refGene.gtf

定量分析,多个 FASTQ 文件要按照文件排序,同一个 lane 的文件要先 R1R2

kb count -i mm10.standard.idx \-g t2g.txt -x 10xv2 \-o output -t 2 --workflow standard \--h5ad --cellranger --filter bustools \GSM4812353_S1_L001_R1_001.fastq.gz \GSM4812353_S1_L001_R2_001.fastq.gz \... \GSM4812353_S1_L002_R1_001.fastq.gz \GSM4812353_S1_L002_R2_001.fastq.gz

输出结果的结构大致如下

├── 10x_version2_whitelist.txt
├── counts_filtered
│   ├── adata.h5ad
│   ├── cells_x_genes.barcodes.txt
│   ├── cells_x_genes.genes.names.txt
│   ├── cells_x_genes.genes.txt
│   └── cells_x_genes.mtx
├── counts_unfiltered
│   ├── adata.h5ad
│   ├── cellranger
│   │   ├── barcodes.tsv
│   │   ├── genes.tsv
│   │   └── matrix.mtx
│   ├── cells_x_genes.barcodes.txt
│   ├── cells_x_genes.genes.names.txt
│   ├── cells_x_genes.genes.txt
│   └── cells_x_genes.mtx
├── filter_barcodes.txt
├── inspect.json
├── kb_info.json
├── matrix.ec
├── output.bus
├── output.filtered.bus
├── output.unfiltered.bus
├── run_info.json
└── transcripts.txt

可以使用 counts_filtered/adata.h5ad 作为下游分析的起点。

因为我们设置了 --cellranger 参数,所以输出目录中也有 cellranger 结构的输出结果。

不推荐使用 --report 输出报告,使用时报了很多错误。

10x snRNA-seq

我们以 10x 的测序数据 1k Brain Nuclei from an E18 Mouse 为例。

我们将生成两个矩阵:一个是剪接转录本矩阵,另一个是未剪接转录本矩阵,然后将它们相加得出核转录本总数。

首先,下载数据

wget https://caltech.box.com/shared/static/j337aflq9ublmwaripkepob41mr23216.txt -O checksums.txt
wget https://caltech.box.com/shared/static/2j8shgwmalzcjawuow51678a8yssvdef.gz -O nuclei_900_S1_L001_R1_001.fastq.gz
wget https://caltech.box.com/shared/static/k2yydqlz2jtckw1shk5h536mxn47nm9n.gz -O nuclei_900_S1_L001_R2_001.fastq.gz
wget https://caltech.box.com/shared/static/tlqdm0w3tvy8ogyktsz7ahggwurc6kkj.gz -O nuclei_900_S1_L002_R1_001.fastq.gz
wget https://caltech.box.com/shared/static/gqrvkqllr9d7zq4e3yfrng9kgfbejowe.gz -O nuclei_900_S1_L002_R2_001.fastq.gz

校验下载文件是否完整

md5sum -c checksums.txt --ignore-missing
# nuclei_900_S1_L001_R1_001.fastq.gz: 成功
# nuclei_900_S1_L001_R2_001.fastq.gz: 成功
# nuclei_900_S1_L002_R1_001.fastq.gz: 成功
# nuclei_900_S1_L002_R2_001.fastq.gz: 成功

下载参考基因组信息,如果已经下载过,可以直接使用本地文件

wget ftp://ftp.ensembl.org/pub/release-98/fasta/mus_musculus/dna/Mus_musculus.GRCm38.dna.primary_assembly.fa.gz
wget ftp://ftp.ensembl.org/pub/release-98/gtf/mus_musculus/Mus_musculus.GRCm38.98.gtf.gz

构建小鼠的 DNA 和内含子索引,使用 nac 模式,后续可以进行 RNA 速率分析

kb ref -i index.idx -g t2g.txt \-f1 cdna.fa -f2 intron.fa \-c1 cdna_t2c.txt -c2 intron_t2c.txt \--workflow nac \Mus_musculus.GRCm38.dna.primary_assembly.fa.gz \Mus_musculus.GRCm38.98.gtf.gz

定量分析

kb count -i index.idx \-g t2g.txt -c1 cdna_t2c.txt \-c2 intron_t2c.txt -x 10xv2 \-o output -t 2 --workflow nac --h5ad \nuclei_900_S1_L001_R1_001.fastq.gz \nuclei_900_S1_L001_R2_001.fastq.gz \nuclei_900_S1_L002_R1_001.fastq.gz \nuclei_900_S1_L002_R2_001.fastq.gz

10x Feature Barcode

我们使用 Kallisto Indexing and Tag Extraction (KITE) 流程对 10x Genomics pbmc_1k_protein_v3 特征条形码数据集进行预处理和分析。

在特征条形码芯片是建立在 scRNA-seq 的基础上,可以同时获得大量单个细胞中基因的表达量和细胞表面蛋白的表达情况,并将细胞数据记录为短 DNA 序列

KITE 处理流程会生成 错配图(Mismatch Map,其中包含实验中使用的所有特征条形码序列及其所有单碱基错配。

错配图用于生成转录本到基因的映射文件(.t2g)和 fasta文件,作为 kallisto 的输入。

使用 kallisto index 建立索引后,kallisto|bustools 就能有效地搜索测序数据,查找错配图中的序列。

下载数据
wget -q https://caltech.box.com/shared/static/asmj4nu90ydhsrk3pm7aaxu00cnnfige.txt -O checksums.txt
wget -q https://caltech.box.com/shared/static/mp2vr3p6dztdyatuag8ir3cektmrztg8.gz -O pbmc_1k_protein_v3_antibody_S2_L001_R1_001.fastq.gz
wget -q https://caltech.box.com/shared/static/f3payi1za7mn0jfai7vm10sy3yqwgpqh.gz -O pbmc_1k_protein_v3_antibody_S2_L001_R2_001.fastq.gz
wget -q https://caltech.box.com/shared/static/e112bbczh9o1rl6gfin36bqp0ga7uvdy.gz -O pbmc_1k_protein_v3_antibody_S2_L002_R1_001.fastq.gz
wget -q https://caltech.box.com/shared/static/3ve2axc8dr8v5nnrhmynrdgpqj6xg42k.gz -O pbmc_1k_protein_v3_antibody_S2_L002_R2_001.fastq.gz

检查数据的完整性

md5sum -c checksums.txt --ignore-missing
创建错配索引

kb 能够生成一个 FASTA 文件,其中包含所有汉明距离小于 2 的特征条形码变体,并创建这些序列的 kallisto 索引。

要做到这一点,我们首先需要准备一个 TSV 文件,其中第一列包含特征条形码序列,第二列包含特征条形码名称。

首先,我们下载 10x Genomics 提供的 feature reference文件。

wget -q http://cf.10xgenomics.com/samples/cell-exp/3.0.0/pbmc_1k_protein_v3/pbmc_1k_protein_v3_feature_ref.csv

使用 pandas 处理成 kb-python 接受的输入形式

import pandas as pddf = pd.read_csv('pbmc_1k_protein_v3_feature_ref.csv')
df[['sequence', 'id']].to_csv('features.tsv', index=None, header=None, sep='\t')

创建索引

kb ref -i mismatch.idx -f1 mismatch.fa -g t2g.txt --workflow kite features.tsv

定量

kb count --h5ad -i mismatch.idx \-g t2g.txt -x 10xv3 --workflow kite -t 8 \pbmc_1k_protein_v3_antibody_S2_L001_R1_001.fastq.gz \pbmc_1k_protein_v3_antibody_S2_L001_R2_001.fastq.gz \pbmc_1k_protein_v3_antibody_S2_L002_R1_001.fastq.gz \pbmc_1k_protein_v3_antibody_S2_L002_R2_001.fastq.gz

Drop-seq

数据集中 GSE178612 研究的是 FoxM1Rb 基因在小鼠乳腺癌中的相互作用。

我们选择其中一个样本 GSM5394388,下载其原始数据

prefetch SRR14872449

解压

fastq-dump SRR14872449/SRR14872449.sra --split-files --gzip -O SRR14872449

表达定量,使用之前构建好的小鼠的索引

kb count --h5ad -i mm10.standard.idx \-g t2g.txt -x DROPSEQ --workflow standard -t 8 \--h5ad --cellranger --filter bustools \SRR14872449/SRR14872449_1.fastq.gz \SRR14872449/SRR14872449_2.fastq.gz \

Indrop

GSE111672 数据集中包含 6 例原发性胰腺癌组织的单细胞 RNA 测序和空间转录组学,

我们随便选择一个样本 GSM3036909 下载原始数据

prefetch SRR6825055

解压

fastq-dump SRR6825055/SRR6825055.sra --split-files --gzip -O SRR6825055

其中 R1 长度为 35R2 长度为 51,是 Indrop-seqV2

不同版本之间的差别:

  • v1:原始版,其中 R2cDNA 序列,R1 为元数据(UMIbarcode)。
  • v2v1 的反转,R1R2 的内容互换
  • v32016 年夏季重新设计,需要手动解复用。R1cDNA 序列,R2 包含凝胶条形码的前半部分,R3 包含文库索引,R4 包含凝胶条形码的后半部分、UMI 和部分 polyA 尾部。

下载构建好的人类参考基因组索引

mkdir human
kb ref -d human \-i human/kb_ref.idx \-g human/t2g.txt

表达定量

kb count --h5ad -i human/kb_ref.idx \-g human/t2g.txt -x INDROPSV2 \--workflow standard -t 8 \--h5ad --cellranger --filter bustools \SRR6825055/SRR6825055_1.fastq.gz \SRR6825055/SRR6825055_2.fastq.gz \

SMART-seq2

我们从研究人类皮质球体内星形胶质细胞的成熟数据 GSE99951 中,下载 GSM2665701 样本进行分析

prefetch SRR5676730

解压

fastq-dump SRR5676730/SRR5676730.sra --split-files --gzip -O SRR5676730

表达定量,不支持 --filter 参数,同时必须加上 --parity 参数

kb count --h5ad -i human/kb_ref.idx \-g human/t2g.txt -x SMARTSEQ2 -t 8 \--parity paired --workflow standard \--h5ad --cellranger \SRR5676730/SRR5676730_1.fastq.gz \SRR5676730/SRR5676730_2.fastq.gz \

其他测序数据可以自行探索一下,前面几种用法基本涵盖了。

相关文章:

单细胞转录组 —— kb-python 原始数据处理

单细胞转录组 —— kb-python 原始数据处理 前言 kallisto|bustools 是一种用于预处理 scRNA-seq 数据的工作流程。 数据预处理步骤包括&#xff1a; 将 reads 与其来源细胞关联起来&#xff1b;根据唯一分子标识符&#xff08;UMI&#xff09;对 reads 进行去重&#xff1…...

全同态加密算法概览

我们前面有谈到《Paillier半同态加密算法》&#xff0c;半同态加密算法除了支持密文加法运算的 Paillier 算法&#xff0c;还有支持密文乘法计算的 RSA 算法&#xff0c;早期的PSI(隐私求交)和PIR(匿踪查询)都有使用基于RSA盲签名技术来实现。今天我们来谈谈能够有效支持任意函…...

leetcode 刷题day38动态规划Part07 打家劫舍(198.打家劫舍、213.打家劫舍II、337.打家劫舍III)

198.打家劫舍 思路&#xff1a; 1、dp[i]为到第i家偷到的最高金额。 2、如果偷第i家&#xff0c;那么dp[i]dp[i-2]nums[i],如果不偷&#xff0c;则dp[i]dp[i-1]&#xff0c;所以递推公式dp[i]max(dp[i-2]nums[i],dp[i-1])。 3、初始值&#xff0c;根据递推公式&#xff0c;我们…...

C0010.Qt5.15.2下载及安装方法

1. 下载及安装 Qt 添加链接描述下载地址&#xff1a;http://download.qt.io/ 选择 archive 目录 安装Qt **注意&#xff1a;**本人使用的是Qt5.15.2版本&#xff0c;可以按如下方法找到该版本&#xff1b;...

制造企业MES管理系统的应用策略与实施路径

在智能制造浪潮的席卷之下&#xff0c;MES管理系统作为连接生产计划与车间操作的核心桥梁&#xff0c;其战略地位愈发显著。本文旨在深入剖析MES管理系统在智能制造转型中的核心价值、实施策略及实践路径&#xff0c;为制造企业探索智能化生产之路提供实践指导与灵感启发。 MES…...

Halcon 3D应用 - 胶路提取

1. 需求 本文基于某手环&#xff08;拆机打磨处理&#xff09;做的验证性工作&#xff0c;为了项目保密性&#xff0c;只截取部分数据进行测试。 这里使用的是海康3D线激光轮廓相机直线电机的方式进行的高度数据采集&#xff0c;我们拿到的是高度图亮度图数据。 提取手环上的胶…...

【Redis】Redis线程模型

目录 1. Redis 是单线程的&#xff0c;还是多线程的&#xff1f;2. Redis单线程模式是怎么样的&#xff1f;Redis 单线程模式的优势Redis 单线程的局限性Redis 单线程的优化策略 3. Redis采用单线程为什么还这么快4. Redis 6.0 之前为什么使用单线程&#xff1f;5. Redis 6.0 之…...

Electron构建桌面应用程序,服务于项目的自主学习记录(持续更新...

无所畏惧地面对未知&#xff0c;并将其视为成长的机会 大纲官网快速入门1.安装node.js -- 这里推荐用nvm管理2.脚手架创建3.electron 包安装到应用的开发依赖4.创建主进程(main.js)并启动项目1.创建页面2.配置main.js3.启动项目 -- 效果 进阶 -- 基于项目场景功能使用场景一&am…...

linux Load Average 计算

在内核代码 kernel/sched/loadavg.c 中有一个公式: a1 a0 * e a * (1 - e) 此算法是指数加权移动平均法&#xff08;Exponential Weighted Moving Average&#xff0c;EMWA&#xff09;&#xff0c;是一种特殊的加权移动平均法&#xff0c;它考虑当前和历史的所有数据&#…...

pandas常用数据格式IO性能对比

前言 本文对pandas支持的一些数据格式进行IO&#xff08;读写&#xff09;的性能测试&#xff0c;大数据时代以数据为基础&#xff0c;经常会遇到操作大量数据的情景&#xff0c;数据的IO性能尤为重要&#xff0c;本文对常见的数据格式csv、feather、hdf5、jay、parquet、pick…...

【D3.js in Action 3 精译_031】3.5.2 DIY实战:在 Observable 平台实现带数据标签的 D3 条形图并改造单元测试模块

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…...

华为OD机试真题-字符串分割

题目描述&#xff1a; 给定非空字符串s&#xff0c;将该字符串分割成一些子串&#xff0c;使每个子串的ASCII码值的和均为水仙花数。 1、若分割不成功&#xff0c;则返回0。 2、若分割成功且分割结果不唯一&#xff0c;则返回-1。 3、若分割成功且分割结果唯一&#xff0c;则返…...

编程技巧:提高代码健壮性与可维护性的关键方法(以 Shell 为例)

在脚本编写和自动化工作中,良好的编程技巧对于确保代码的健壮性和可维护性至关重要。以下是一些关键的编程技巧,包括模块化设计、单元测试、版本控制、处理边界条件、错误处理、中间值保存和创建 Flag。本文将通过 Shell 脚本示例来阐述这些技巧的应用。 1. 模块化设计 **定…...

【无标题】ReadableStream is not defined

升级 node 版本到 18 及以上即可解决...

【JVM】高级篇

1 GraalVM 1.1 什么是GraalVM GraalVM是Oracle官方推出的一款高性能JDK&#xff0c;使用它享受比OpenJDK或者OracleJDK更好的性能。 GraalVM的官方网址&#xff1a;https://www.graalvm.org/ 官方标语&#xff1a;Build faster, smaller, leaner applications。 更低的CPU…...

nacos1.4源码-服务发现、心跳机制

nacos的服务发现主要采用服务端主动推送客户端定时拉取&#xff1b;心跳机制通过每5s向服务端发送心跳任务来保活&#xff0c;当超过15s服务端未接收到心跳任务时&#xff0c;将该实例设置为非健康状态&#xff1b;当超过30s时&#xff0c;删除该实例。 1.服务发现 nacos主要采…...

C++ 2D平台游戏开发案例

关于2D平台游戏的C开发案例&#xff0c;包括游戏设计、实现细节、图形渲染和音效处理等内容。虽然无法一次性提供3000字&#xff0c;但我会尽量详细描述各个部分&#xff0c;并确保有足够的深度和广度。 2D平台游戏开发案例 一、游戏设计 游戏概述 游戏名称&#xff1a;“冒险…...

【Webpack--019】TreeShaking

&#x1f913;&#x1f60d;Sam9029的CSDN博客主页:Sam9029的博客_CSDN博客-前端领域博主 &#x1f431;‍&#x1f409;若此文你认为写的不错&#xff0c;不要吝啬你的赞扬&#xff0c;求收藏&#xff0c;求评论&#xff0c;求一个大大的赞&#xff01;&#x1f44d;* &#x…...

Docker基本操作命令

Docker 是一个开源的应用容器引擎&#xff0c;允许开发者打包应用以及其依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。主要功能是为开发者提供一个简单…...

开源计算器应用的全面测试计划:确保功能性和可靠性

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...