news 2026/9/3 15:36:35

PyPI源码包手动下载与离线部署实战:以gensim-0.13.0rc1为例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PyPI源码包手动下载与离线部署实战:以gensim-0.13.0rc1为例

简介:本资源为PyPI官方发布的gensim-0.13.0rc1源码发布包(tar.gz格式),面向Python自然语言处理开发者、文本挖掘工程师及云原生AI系统构建者,解决大规模语料的主题建模、文档相似度计算与分布式文本分析需求。压缩包共163个文件,含95个核心Python模块(如word2vec_inner.c、doc2vec_inner.c等底层实现)、19个说明与许可文本(COPYING、README.rst等)、12个Jupyter示例笔记本(含LDA/LSA实战)、以及cor、blei、uci等主流语料格式支持文件,整体体积仅3.98MB,轻量但功能完备。已有394人学习下载,资源结构清晰,涵盖从算法实现(C扩展)、模型训练(.cor/.blei语料)、到云环境适配(Zookeeper协同、分布式训练接口)的完整技术链路,可直接编译部署、复现实验或集成至Kubernetes调度的文本分析微服务中。

1. 项目概述:从PyPI下载gensim-0.13.0rc1的深层价值

如果你正在接触自然语言处理(NLP),尤其是主题建模、词向量这些方向,那么“gensim”这个名字你肯定不陌生。它是一个用Python写的开源库,专门用来干这些“脏活累活”,把一堆文本数据变成计算机能理解和计算的数学表示。今天要聊的,不是怎么用gensim的API,而是一个更基础、但很多人会忽略的环节:如何从PyPI(Python Package Index)官网,手动下载一个特定版本的源码包,比如gensim-0.13.0rc1.tar.gz

你可能会问,现在不都用pip install gensim一键搞定吗?没错,对于99%的日常使用场景,pip就是最佳选择。但手动下载源码包这个操作,其意义远不止“安装一个库”那么简单。它关乎你对Python生态的理解深度,是进阶路上必须掌握的一项“硬核”技能。当你需要离线部署、深入源码学习、定制化修改、或者排查某个特定版本(尤其是像0.13.0rc1这样的候选发布版)的兼容性问题时,直接从PyPI获取源码就成了唯一可靠的途径。这个过程,能让你看清一个Python包从打包、发布到分发的完整链条,理解pip背后到底做了什么。今天,我就以一个老NLP工程师的视角,带你彻底拆解“下载gensim-0.13.0rc1.tar.gz”这个动作背后的门道,以及拿到源码包后,你能用它做什么。

2. 核心需求解析:为什么我们需要手动下载源码包?

在深入操作之前,我们必须先搞清楚,在哪些场景下,你会需要绕过便捷的pip,去手动折腾一个.tar.gz文件。这绝不是为了炫技,而是实实在在的生产和研发需求。

2.1 离线环境与受限网络的部署

这是最经典、也最刚需的场景。很多企业的生产服务器、科研机构的内网集群,出于安全策略,是无法直接访问外网的。你不可能在这些机器上执行pip install。这时,准备工作就必须在能联网的开发机或跳板机上完成:下载好目标包及其所有依赖的源码包或wheel文件,然后通过U盘、内网共享或部署工具,传输到目标机器进行安装。手动从PyPI下载,是获取这些安装文件的权威源头。

2.2 深入源码学习与调试

Gensim这样的库,封装了大量复杂的算法,比如LDA主题模型、Word2Vec词向量。如果你只想调用API,pip install足够了。但如果你想真正理解算法是如何实现的、某个参数调整到底影响了内部哪一步计算、或者遇到了一个诡异的bug需要追踪,那么阅读和调试源码是必经之路。手动下载的tar.gz包,解压后就是最原始、未经安装的源代码结构,你可以直接用IDE打开,任意设置断点、修改代码、运行测试,学习体验是最直接的。

2.3 特定版本验证与问题复现

软件版本管理是工程中的一大挑战。gensim-0.13.0rc1这个版本号就很有讲究:0.13.0是主版本,rc1表示这是第一个“候选发布版”。它可能修复了之前版本的一些重要bug,也可能引入了一些实验性功能,但稳定性尚未经过大规模验证。如果你的项目在升级后出现了问题,需要锁定到这个特定版本进行复现和排查,那么确保你安装的确确实实是这个rc1版本,就至关重要。通过PyPI官网的发布历史记录手动下载,是获取指定版本最准确无误的方式,避免了镜像站同步延迟或缓存带来的版本错乱。

2.4 定制化修改与二次开发

尽管开源社区很强大,但总有那么一些特殊需求,是现有库无法满足的。比如,你需要对Gensim的某个模型输出格式做微小调整以适配内部系统,或者需要针对超大规模语料优化某个内存瓶颈。这时,你就需要修改源码。手动下载源码包,给了你一个干净的起点。你可以基于这个官方版本进行修改、打补丁,甚至以此为基础进行二次开发,而不必担心污染通过pip安装的全局包环境。

注意:对开源库进行修改后,如何管理是一个重要问题。通常建议在项目内以子模块(git submodule)或拷贝源码的形式引入,并清晰记录修改点,而不是直接替换掉通过pip安装的全局包,以免造成环境混乱。

3. PyPI生态与源码包格式深度解析

要优雅地下载,先得知道我们在下载什么。PyPI不是一个简单的文件服务器,它是整个Python软件生态的基石。

3.1 PyPI的角色:不止是下载站

PyPI,全称 Python Package Index,你可以把它理解为Python世界的“应用商店”或“中央仓库”。它的核心功能是:

  1. 元数据存储:存储每个包的名称、版本、作者、依赖关系、分类、描述等关键信息。
  2. 文件托管:存储包的实际发布文件,主要是源码包(sdist)和预编译包(wheel)。
  3. 索引服务:提供API供piptwine(上传工具)等客户端查询和检索。

当你执行pip install gensim时,pip会做以下几件事:

  1. 查询PyPI(或你配置的镜像源)上gensim包的元数据,找到最新稳定版。
  2. 根据你的操作系统和Python环境,选择最合适的发布文件(优先选择wheel,因为安装更快)。
  3. 下载该文件,检查哈希值确保完整性,然后执行安装流程。

而我们手动下载,实际上是跳过了pip的自动选择步骤,直接定位到PyPI上存储的特定文件。

3.2 源码分发包(sdist) vs Wheel包

PyPI上的包主要有两种格式:

特性源码分发包 (sdist, 如.tar.gz)Wheel包 (如.whl)
文件扩展名.tar.gz.zip.whl
内容原始的源代码、setup.py/pyproject.toml、资源文件等。预编译的二进制文件(对于含C扩展的包)或纯Python代码,结构更规范。
安装过程需要在本地执行构建(可能包括编译C扩展),依赖本地环境。直接解压到site-packages即可,无需构建,安装速度快。
跨平台性好。同一份源码可在不同平台构建。依赖特定平台和Python版本(文件名中会体现,如cp38-cp38-win_amd64)。
我们的目标gensim-0.13.0rc1.tar.gz就是典型的sdist。对于快速安装,应选择对应平台的wheel。

对于gensim这样一个早期版本(0.13.0),它可能包含一些Cython或C扩展代码以提升性能。下载其.tar.gz源码包,意味着你需要在本地有合适的编译环境(如C编译器、Cython)才能成功安装。而如果下载对应平台的.whl文件,安装则会瞬间完成。

那么,为什么我们仍然聚焦于.tar.gz因为它是“源头”。Wheel是从源码包构建出来的。获取源码包,你拥有了最大的灵活性和控制权。你可以查看构建配置、修改代码、并决定如何构建它。

3.3 版本号0.13.0rc1的语义

这是一个遵循“语义化版本”的典型例子:

  • 0:主版本号。为0表示初始开发版本,公共API可能不稳定。
  • 13:次版本号。表示增加了向下兼容的新功能。
  • 0:修订号。表示做了向下兼容的问题修正。
  • rc1:预发布标签。rc即 Release Candidate(候选版本),1是序号。这意味着这个版本可能是最终稳定版0.13.0的前身,用于测试者最终验证。

实操心得:在生产环境中,对rcbetaalpha这类预发布版本要格外谨慎。除非你有明确的需求(如测试新功能、修复了某个你遇到的致命bug),否则应优先选择不带预发布标签的稳定版。手动下载预发布版本,正是为了这种谨慎的测试和评估。

4. 手动下载gensim源码包的多种实战方法

理论说完了,我们上实操。有多种方法可以获取到gensim-0.13.0rc1.tar.gz这个文件,我将从最简单到最底层一一介绍。

4.1 方法一:使用pip download(最推荐)

pip不仅会安装,它还有一个非常实用的download命令,专门用于下载包而不安装。这是最接近“一键获取”且最规范的方法。

# 基础命令:下载到当前目录 pip download gensim==0.13.0rc1 # 指定下载平台和Python版本(如果你想下载wheel,可以这样限定) # pip download gensim==0.13.0rc1 --only-binary=:all: --platform manylinux1_x86_64 --python-version 37 # 下载源码包(sdist)的明确指定 pip download gensim==0.13.0rc1 --no-binary :all:

执行pip download gensim==0.13.0rc1后,pip会:

  1. 连接PyPI(或你配置的镜像源)。
  2. 查找gensim版本0.13.0rc1
  3. 根据你的当前环境,选择最优文件下载。在大多数情况下,如果该版本有兼容你环境的wheel,它会下载wheel;如果没有,它会回退到下载源码包.tar.gz
  4. 文件将保存在你运行命令的当前目录下。

为什么最推荐这个方法?

  • 自动处理依赖:加上--dest参数和--no-deps控制,你可以轻松下载整个依赖树,这对于离线部署准备至关重要。
    # 下载gensim及其所有依赖包到 ./offline_packages 目录 pip download gensim==0.13.0rc1 -d ./offline_packages
  • 利用镜像加速:和pip install一样,你可以通过配置镜像源来加速下载。
  • 可靠准确:它使用和pip install完全相同的逻辑和源,确保你下载到的就是PyPI上官方认可的文件。

4.2 方法二:直接访问PyPI项目页面(最直观)

如果你喜欢“所见即所得”,或者想浏览该版本的所有发布文件,直接访问PyPI的Web界面是最好的方式。

  1. 打开浏览器,访问:https://pypi.org/project/gensim/#history
  2. 页面会展示gensim的所有版本发布历史。你需要找到0.13.0rc1这个版本。由于这个版本较老,你可能需要翻页或使用浏览器的页面查找功能(Ctrl+F)。
  3. 点击0.13.0rc1这个版本链接,进入该版本的详情页。
  4. 在详情页的“Download files”区域,你会看到该版本的所有发布文件列表。其中就包含gensim-0.13.0rc1.tar.gz
  5. 直接点击gensim-0.13.0rc1.tar.gz链接,浏览器就会开始下载。

这个方法的好处

  • 直观,可以看到哈希值(如MD5、SHA256),用于校验文件完整性。
  • 可以同时看到该版本对应的wheel文件、元数据等所有信息。

4.3 方法三:拼接直接下载URL(最底层)

PyPI的文件存储有固定的URL模式。如果你知道规则,甚至可以手动拼接出下载链接,这在写脚本或文档时很有用。

对于gensim-0.13.0rc1.tar.gz,它的直接下载URL通常是:https://files.pythonhosted.org/packages/source/g/gensim/gensim-0.13.0rc1.tar.gz

URL结构解析:

  • https://files.pythonhosted.org/:PyPI的文件托管域名。
  • packages/source/:表示这是源码包区域。
  • g/gensim/:包名gensim的首字母用于目录分级,这是一种常见的文件存储优化策略,避免单个目录文件过多。
  • gensim-0.13.0rc1.tar.gz:具体的文件名。

你可以直接在浏览器地址栏输入这个URL,或者用wgetcurl命令下载:

# 使用 wget wget https://files.pythonhosted.org/packages/source/g/gensim/gensim-0.13.0rc1.tar.gz # 使用 curl curl -O https://files.pythonhosted.org/packages/source/g/gensim/gensim-0.13.0rc1.tar.gz

注意:虽然这种方法直接,但它依赖于你对文件名和路径规则的准确了解。如果包维护者使用了不同的打包方式或PyPI未来更改了存储结构,链接可能会失效。因此,前两种方法是更稳健的选择。

4.4 方法四:使用第三方镜像源

在国内,从PyPI官方源下载可能速度较慢。我们可以使用国内的镜像源,例如清华大学开源软件镜像站、阿里云镜像等。这些镜像站通常同步了PyPI的包文件。

以清华大学镜像为例:

  1. 临时使用:在pip download命令后加上-i参数。
    pip download gensim==0.13.0rc1 -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. 配置为默认源:修改pip的配置文件。Linux/macOS:~/.pip/pip.confWindows:%USERPROFILE%\pip\pip.ini在文件中写入:
    [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn
    配置后,所有pip命令(包括download)都会默认使用该镜像,速度会有显著提升。

重要提醒:对于0.13.0rc1这样的历史版本,一些镜像站可能为了节省空间,不会永久保留所有老版本文件。如果镜像站找不到,它会回退到官方源,或者报错。此时,直接使用官方源(方法二或三)可能是更可靠的选择。

5. 源码包到手后的核心操作与探索

下载到gensim-0.13.0rc1.tar.gz文件后,我们的旅程才真正开始。这个压缩包是一个宝库。

5.1 解压与查看源码结构

首先,解压这个包:

tar -xzvf gensim-0.13.0rc1.tar.gz

解压后会生成一个gensim-0.13.0rc1目录。让我们看看里面有什么关键内容:

gensim-0.13.0rc1/ ├── setup.py # 最关键的安装和配置脚本(旧标准) ├── setup.cfg # 配置补充 ├── MANIFEST.in # 指定打包时要包含的额外文件 ├── README.md或README.rst # 项目说明文档 ├── LICENSE # 许可证文件 ├── requirements.txt # 依赖声明(可能) ├── gensim/ # 核心源码目录 │ ├── __init__.py │ ├── models/ # 模型实现,如ldamodel.py, word2vec.py │ ├── corpora/ # 语料库处理模块 │ ├── similarities/ # 相似度计算模块 │ └── ... ├── tests/ # 单元测试目录 └── ...其他文档和脚本

浏览setup.py:这是理解如何构建和安装这个包的关键。打开它,你可以看到包名、版本、作者信息、依赖库列表(install_requires)、可能存在的C/C++扩展配置等。对于gensim-0.13.0rc1,你可能会发现它对numpyscipy的版本有特定要求,这是你离线部署时必须注意的。

5.2 从源码包进行安装

你有两种主要方式从源码安装:

方式A:使用pip安装本地文件

pip install ./gensim-0.13.0rc1.tar.gz # 或者先进入解压后的目录 cd gensim-0.13.0rc1 pip install .

pip会自动执行setup.py中的构建和安装流程。如果包包含C扩展,它会尝试调用编译器进行编译。

方式B:使用python setup.py传统方式(逐步操作)

cd gensim-0.13.0rc1 # 1. 构建扩展(如果有的话) python setup.py build # 2. 安装到当前Python环境 python setup.py install

这种方式让你更清晰地看到构建和安装的每一步,适合调试安装问题。

踩坑记录:在安装包含C扩展的旧版本包时,最常见的错误是缺少编译环境。在Linux上,你需要gccpython3-dev等包;在Windows上,可能需要安装Visual C++ Build Tools。如果遇到编译错误,仔细阅读错误信息,通常是某个头文件找不到或库链接失败。

5.3 源码学习与调试实战

解压后的目录就是你本地的源码仓库。你可以用任何IDE(如VSCode、PyCharm)打开这个目录。

  • 阅读核心算法:直接进入gensim/models/word2vec.pygensim/models/ldamodel.py,这是gensim的精华所在。你可以看到Word2Vec的Skip-gram或CBOW模型是如何用Python和NumPy实现的,LDA的吉布斯采样或变分推断算法是如何迭代的。代码中的注释往往包含了算法的关键论文引用。
  • 运行单元测试:进入tests/目录,你可以运行特定的测试来验证功能,或理解某个函数的使用方法。
    # 运行所有测试(可能需要先安装pytest) python -m pytest tests/ # 运行特定模型的测试 python -m pytest tests/test_word2vec.py
  • 修改与实验:这是最强大的部分。比如,你觉得Word2Vec保存的模型文件太大,想研究一下save方法,可以找到对应代码,添加一些日志,或者尝试一种不同的序列化方式。修改后,在项目根目录用pip install -e .进行“可编辑模式”安装,你的修改会立即生效,方便测试。

5.4 处理依赖问题:离线环境部署全流程

手动下载一个包只是开始,离线部署的真正挑战在于处理依赖树gensim依赖numpyscipy,而scipy又依赖numpy和其他库。

完整的离线部署准备流程如下:

  1. 在联网环境准备

    # 创建一个干净的目录 mkdir offline_packages && cd offline_packages # 使用pip download递归下载gensim及其所有依赖(不区分平台,尽量下载源码包以保兼容性) pip download gensim==0.13.0rc1 --no-binary :all: -d . # 或者,如果你知道目标环境的具体平台,可以下载wheel以提高安装速度 # pip download gensim==0.13.0rc1 --platform manylinux2014_x86_64 --python-version 38 --only-binary=:all: -d .
  2. 传输到离线环境:将整个offline_packages目录通过安全方式拷贝到离线机器。

  3. 在离线环境安装

    # 进入包目录 cd offline_packages # 使用pip从本地文件安装,--no-index 告诉pip不要从网络查找,--find-links 指定查找目录 pip install gensim==0.13.0rc1 --no-index --find-links .

    pip会自动解析gensim的依赖关系,并从当前目录中找到并安装numpyscipy等所有必需的包。

关键技巧:对于像numpyscipy这样包含C扩展且编译复杂的包,在离线Linux环境中从源码安装可能会失败(缺少编译环境)。因此,在准备阶段,尽可能下载与目标操作系统和Python版本匹配的wheel文件(.whl),可以极大简化离线安装过程,避免编译依赖的噩梦。你可以使用pip download时指定--platform--python-version--only-binary=:all:来达成这一目标。

6. 常见问题、故障排查与进阶技巧

即使按照步骤操作,你也可能会遇到一些问题。这里汇总了一些典型场景和解决方案。

6.1 下载与安装过程中的典型错误

问题现象可能原因解决方案
pip download找不到0.13.0rc1版本1. 版本号拼写错误。
2. 该版本已从PyPI移除(罕见)。
3. 镜像源未同步此老版本。
1. 核对版本号,注意大小写和rc标签。
2. 访问PyPI官网项目历史页面确认。
3. 使用-i参数切换到官方源https://pypi.org/simple重试。
安装时编译失败(特别是error: Microsoft Visual C++ 14.0 is requiredWindows环境下缺少C/C++编译器,无法编译gensim中的Cython/C扩展。方案1(推荐):在联网环境下载对应Python版本和Windows平台的gensim wheel文件(.whl)进行离线安装。
方案2:安装Microsoft Visual C++ Build Tools。
安装时报错Could not find a version that satisfies the requirement numpy>=x.x在离线安装时,本地目录中没有找到符合版本要求的numpy包。确保在pip download阶段已经成功下载了所有依赖包。检查offline_packages目录中是否存在符合条件的numpy轮子或源码包。可能需要手动下载更高版本的依赖包。
导入gensim时报错ImportError: DLL load failedundefined symbol在Linux/Mac上,可能因为从源码编译时链接了不兼容的系统库,或者wheel文件与当前Python环境不匹配。1. 尝试使用纯Python环境(如conda虚拟环境)重装。
2. 确保下载的wheel文件名中的平台(如manylinux1)、Python版本(如cp38)与你的环境匹配。
3. 从源码安装时,确保编译环境纯净。

6.2 版本管理与虚拟环境的最佳实践

强烈建议永远不要在系统的全局Python环境中直接安装或测试gensim-0.13.0rc1这样的特定版本。这极易引发版本冲突。

使用虚拟环境(venv或conda)隔离:

# 1. 创建虚拟环境 python -m venv my_gensim_test_env # 激活 (Linux/macOS) source my_gensim_test_env/bin/activate # 激活 (Windows) my_gensim_test_env\Scripts\activate # 2. 在虚拟环境中安装 pip install /path/to/gensim-0.13.0rc1.tar.gz # 3. 测试、使用... # 4. 退出虚拟环境 deactivate

这样,无论你怎么折腾这个环境,都不会影响其他项目。

6.3 深入探索:从源码构建wheel文件

如果你需要在多个离线机器上部署,每次都从源码编译既耗时又容易出错。一个高级技巧是:在一台与目标环境相同的联网机器上,从源码包构建出wheel文件,然后分发这个wheel文件。

# 1. 确保已安装 wheel 和 setuptools pip install wheel setuptools # 2. 进入源码目录 cd gensim-0.13.0rc1 # 3. 构建wheel python setup.py bdist_wheel

命令执行成功后,会在dist/目录下生成一个类似gensim-0.13.0rc1-cp38-cp38-manylinux1_x86_64.whl的文件。这个.whl文件就是针对你当前平台和Python版本预编译好的二进制包,可以直接复制到任何相同环境的离线机器上,用pip install *.whl瞬间完成安装,无需编译。

6.4 安全与完整性校验

从网络下载文件,校验其完整性是好习惯。PyPI页面和某些命令行工具会提供包的哈希值。

  • 使用pip校验pip在安装时会自动校验哈希值。你也可以用pip hash命令手动计算本地文件的哈希值,但与PyPI上公布的值进行比较需要手动操作。
  • 手动校验:在PyPI项目文件下载页面,通常会列出SHA256哈希值。你可以在本地用以下命令计算对比:
    # Linux/macOS shasum -a 256 gensim-0.13.0rc1.tar.gz # Windows (PowerShell) Get-FileHash gensim-0.13.0rc1.tar.gz -Algorithm SHA256

手动下载一个像gensim-0.13.0rc1.tar.gz这样的源码包,远不止是一个简单的下载动作。它是一条通往深度理解Python包管理、离线部署、源码级调试和定制化开发的路径。从知道“怎么下”,到明白“为什么这么下”,再到掌握“下了之后能干什么”,这个过程能显著提升你作为开发者的自主性和解决问题的能力。下次当你再遇到复杂的部署环境或棘手的库版本问题时,希望你能想起,解决问题的钥匙,或许就藏在那个最原始的.tar.gz文件里。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 8:13:31

PHP仿永硕E盘源码解析:从文件管理到安全实践的完整指南

简介:本资源是一套完整的PHP在线网盘系统开发实例,面向Web开发初学者与中级PHP工程师,用于快速掌握文件存储类Web应用的核心实现逻辑。源码仿照永硕E盘功能设计,涵盖用户注册登录、文件上传下载、目录管理、权限控制及安全防护等典…

作者头像 李华
网站建设 2026/9/2 10:22:25

STM32F103C8T6驱动ADS1015:12位I2C ADC采集与寄存器配置详解

简介:ADS1015 驱动源码工程面向 STM32F103C8T6 平台,实现与 ADS1015 模数转换器的 IIC 通信,适合需要采集电压、温度、压力等多路模拟信号的嵌入式开发者。工程从 IIC 初始化、配置寄存器、读取转换结果到电压换算形成完整闭环,并…

作者头像 李华
网站建设 2026/9/4 12:40:22

Pandora_R22:嵌入式底层参数调试工具原理与安全实践

简介:这是一款面向手机维修工程师与底层开发人员的专业级设备参数修改工具,基于Pandora_R22官方原版实现芯片级参数读写与校准,广泛应用于维修加密狗固件集成场景。资源包共196个文件,含88个XML配置模板(定义各芯片平台…

作者头像 李华
网站建设 2026/9/3 13:07:09

企业微信OpenAPI Java生产级集成设计

简介:本资源是一套基于Java语言实现的企业微信OpenAPI接口的完整开发源码,面向企业级应用开发者、Java后端工程师及企业微信集成项目的技术人员,解决企业微信消息推送、通讯录管理、应用授权、审批流对接等核心场景的API调用与封装难题。压缩…

作者头像 李华
网站建设 2026/9/3 13:07:06

安全集成 1000+ Agent 技能:AI技能库新手负责任开发指南

安全集成 1000 Agent 技能:AI技能库新手负责任开发指南 【免费下载链接】awesome-agent-skills A curated collection of 1000 agent skills from official dev teams and the community, compatible with Claude Code, Codex, Gemini CLI, Cursor, and more. 项目…

作者头像 李华