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

发布 rust 源码包 (crates.io)

rust 编程语言的包 (或者 , library) 叫做 crate, 也就是软件中的一个组件. 一个完整的软件通常由多个 crate 组成, rust 编译器 (rustc) 一次编译一整个 crate, 不同的 crate 可以同时并行编译.

rust 官方有一个集中发布开源包的网站 crates.io. 发布在这上面的 crate 可以很方便的在自己的项目中依赖使用, 国内也有这个网站的加速镜像.

本文介绍发布 crate 的过程.


相关链接:

  • 《ibus 源代码阅读 (1)》 https://blog.csdn.net/secext2022/article/details/136099328

  • https://www.rust-lang.org/

  • https://crates.io/

    国内镜像: https://rsproxy.cn/

目录

  • 1 编写 Cargo.toml

  • 2 登录 crates.io

  • 3 发布源码包

  • 4 总结与展望

1 编写 Cargo.toml

在发布之前, 需要仔细检查一下 Cargo.toml 文件, 比如:

[package]
name = "librush"
version = "0.1.0-a1"
edition = "2021"
license = "LGPL-2.1-or-later OR GPL-3.0-or-later"authors = ["secext2022 <secext2022@outlook.com>"]
description = "艾刷 (libRush = lib + IBus + Rust + h): 用 rust 编写的 ibus 模块, 不用 GObject (ibus module written in pure rust, without GObject) (输入法, input method)"
repository = "https://github.com/fm-elpac/librush"
keywords = ["ibus", "input-method"]
categories = ["accessibility", "api-bindings", "localization"][[bin]]
name="ibrus"
path="src/bin.rs"[dependencies]
log = "^0.4.20"
serde = "^1.0.196"
serde_json = "^1.0.113"
zbus = { version = "^4.0.1", default-features = false }env_logger = "^0.11.1"tokio = { version = "^1.36.0", features = ["full"], optional = true }[build-dependencies]
built = { version = "^0.7.1" }
vergen = { version = "^8.3.1", features = ["build", "git", "gitcl"] }[features]
default = ["pmim"]
pmim = ["tokio", "zbus/tokio"]
async-io = ["zbus/async-io"]

下面对其中的一些重要字段进行说明: (参考文档 https://doc.rust-lang.org/cargo/reference/manifest.html)

  • name 源码包的名称.

    和大部分编程语言的 标识符 的命名规则差不多. 只允许使用 0-9a-z- _ 字符, 最大长度 64.

    crates.io 对于名称的管理原则是, 先到先得. 除非特殊情况, 谁先发布了某个名称的源码包, 这个名称就归谁所有. 这个类似于域名 (DNS) 的管理原则.

    所以, 有喜欢的名称快去抢啊 ~

  • version 源码包的版本号.

    必须符合 语义化版本 2.0.0 https://semver.org/lang/zh-CN/

  • edition rust 编程语言的大版本.

    rust 1.0 版本以后, 必须保持很强的向后兼容性, 不能破坏已有的代码. 为了在兼容的同时, 能够继续健康发展 (避免历史包袱), rust 提出了 edition 机制.

    每 3 年推出一个 edition, 目前有: 2015, 2018, 2021. 不同 edition 的代码不兼容.

    参考文档 https://doc.rust-lang.org/edition-guide/editions/index.html

  • license 源码包使用的开源许可证.

    许可证的列表可以在这个网站查找: https://spdx.org/licenses/

  • authors 作者.

  • description 源码包的描述, 比较简短 (可以使用中文).

  • repository 对应源代码仓库的 URL.

  • keywords 关键词.

    有助于搜索到这个源码包. 最多 5 个, 只能使用 ASCII 字符, 每个关键词的最大长度 20. 这个对中文不太友好, 必须差评 !

  • categories 源码包所属的分类.

    最多 5 个, 只能从这个列表中选择: https://crates.io/category_slugs


区区几个字段, 每个字段都对应一大堆不同的规则. 想搞懂所有这些还真不容易呢 !

除了 Cargo.toml 文件, 还要检查一下 README.md 文件, 这个是项目的说明文件, 别人点进去首先看到的东西.

最后使用命令 cargo doc 编译一下文档, 在本地先看看文档是否还需要补充.

2 登录 crates.io

在这里插入图片描述

打开 crates.io, 点击右上角的 Log in with GitHub 登录.

在这里插入图片描述

登录之后, 点击右上角的 Account Settings.

在这里插入图片描述

点击左侧的 API Tokens, 然后创建一个新的 token. 在本地运行命令:

> cargo login --registry crates-io

粘贴刚刚创建的 token, 完成登录.

3 发布源码包

在项目的根目录运行命令:

> cargo publish --registry crates-io

耐心等待, 这个会把要发布的源码包重新编译一遍, 可能需要比较长的时间. 编译完后就会发布了.

在这里插入图片描述

发布之后就能在 My Crates 看到了.

在这里插入图片描述

4 总结与展望

crates.io 是 rust 源码包集中发布的地方, 发布一个 crate 还是比较简单的.

如果有 rust 代码需要分享, 建议发在这里, 使用起来就会很方便.


本文使用 CC-BY-SA 4.0 许可发布.

相关文章:

发布 rust 源码包 (crates.io)

rust 编程语言的包 (或者 库, library) 叫做 crate, 也就是软件中的一个组件. 一个完整的软件通常由多个 crate 组成, rust 编译器 (rustc) 一次编译一整个 crate, 不同的 crate 可以同时并行编译. rust 官方有一个集中发布开源包的网站 crates.io. 发布在这上面的 crate 可以…...

jQuery 基础、选择器和筛选器

【一】JQuery基础 【1】什么时Jquery &#xff08;1&#xff09;定义 jQuery是一个流行的JavaScript库&#xff0c;旨在简化JavaScript编程和处理HTML文档的任务。它提供了一组易于使用的功能和方法&#xff0c;可以加快开发速度并提高跨浏览器兼容性。一款轻量级的JS框架 …...

网络原理-UDP/TCP协议

协议 在网络通信中,协议是非常重要的一个概念,在下面,我将从不同层次对协议进行分析. 应用层 IT职业者与程序打交道最多的一层,调用系统提供的API写出的代码都是属于应用层的. 应用层中有很多现成的协议,但是更多的,我们需要根据实际情况来进行制作自定义协议. 自定义协议…...

C语言——实用调试技巧——第2篇——(第23篇)

坚持就是胜利 文章目录 一、实例二、如何写出好&#xff08;易于调试&#xff09;的代码1、优秀的代码2、示范&#xff08;1&#xff09;模拟 strcpy 函数方法一&#xff1a;方法二&#xff1a;方法三&#xff1a;有弊端方法四&#xff1a;对方法三进行优化assert 的使用 方法五…...

broom系列包: 整理模型输出结果

broom包 说明 tidy、augment和glance函数的输出总是一个小tibble。 输出从来没有行名。这确保了您可以将它与其他整洁的输出组合在一起&#xff0c;而不用担心丢失信息(因为R中的行名不能包含重复)。 有些列名保持一致&#xff0c;这样它们就可以跨不同的模型进行组合。 tidy(…...

Spring Boot 参数校验机制原理以及如何实现一个自定义校验注解

Spring Boot 参数校验原理 Spring Boot 提供了一种方便的参数校验机制&#xff0c;借助于 JSR-303&#xff08;Bean Validation&#xff09;规范&#xff0c;通过在方法参数上添加校验注解来实现参数校验。下面是 Spring Boot 参数校验的基本原理&#xff1a; JSR-303 标准注解…...

长短期记忆神经网络

目录 LSTM 神经网络架构 分类 LSTM 网络 回归 LSTM 网络 视频分类网络 更深的 LSTM 网络 网络层 分类、预测和预报 序列填充、截断和拆分 按长度对序列排序 填充序列 截断序列 拆分序列 指定填充方向 归一化序列数据 无法放入内存的数据 可视化 LSTM 层架构 …...

解决vscode每次git pull/push都需要输入账号密码

git如何设置用户名 邮箱 密码 //设置用户 git config --global user.name "xxx"//设置邮箱 git config --global user.email "xxxxxx.com"//设置密码 git config --global user.password "xxxxx"解决每次git pull/push操作都需要输入密码 git …...

Rancher实用篇-使用rancher,部署微服务应用

说到rancher&#xff0c;我们必须先了解一下k8s 一、k8s简介 Kubernetes&#xff08;通常简写为 K8s&#xff09;是一个开源的容器管理系统&#xff0c;由Google于2014年发起&#xff0c;并在2015年贡献给Cloud Native Computing Foundation (CNCF)进行维护。它基于Borg项目的…...

爬取m3u8视频

网址&#xff1a;https://www.bhlsm.com/cupfoxplay/609-3-1/ 相关代码&#xff1a; #采集网址&#xff1a;https://www.bhlsm.com/cupfoxplay/609-3-1/ #正常视频网站&#xff1a;完整视频内容 # pip install pycryptodomex #流媒体文件&#xff1a;M3U8&#xff08;把完整的…...

抖音视频抓取软件的优势|视频评论内容提取器|批量视频下载

抖音视频抓取软件在市场上的优势明显&#xff1a; 功能强大&#xff1a;我们的软件支持关键词搜索抓取和分享链接单一视频提取两种方式&#xff0c;满足用户不同的需求。同时&#xff0c;支持批量处理数据&#xff0c;提高用户获取视频的效率。 操作简单&#xff1a;我们的软件…...

apidoc接口文档的自动更新与发布

文章目录 一、概述二、环境准备三、接口文档生成1. 下载源码2. 初始化3.执行 四、文档发布五&#xff0c;配置定时运行六&#xff0c;docker运行 一、概述 最近忙于某开源项目的接口文档整理&#xff0c;采用了apidoc来整理生成接口文档。 apidoc是一个可以将源代码中的注释直…...

Oracle EBS R12.1 FA 批量计划外折旧

在资产工作台上可以进行单个资产的计划外折旧&#xff0c;如果进行批量计划外折旧的话就需要进行开发客户化form或者webadi 进行数据上载后调用FA 标准API了 以下是标准API的demo示例 DECLAREl_trans_rec FA_API_TYPES.trans_rec_type; l_asset_hdr_rec FA_API_TYPES.asset_hdr…...

15.3 基于深度学习的WiFi指纹低成本地点识别

文献来源:Nowicki M, Wietrzykowski J. Low-effort place recognition with WiFi fingerprints using deep learning[C]//Automation 2017: Innovations in Automation, Robotics and Measurement Techniques 1. Springer International Publishing, 2017: 575-584. 摘要 使…...

Git基本操作(1)

Git基本操作&#xff08;1&#xff09; 初始化git本地仓库git本地仓库配置git config user.name 和git config user.emailgit config --unset user.name和git config --unset user.emailgit config --global 认识工作区&#xff0c;暂存区&#xff0c;版本库更深层次理解 git a…...

k8s-helm部署应用 19

Helm部署nfs-client-provisioner&#xff08;存储类&#xff09;&#xff1a; 预先配置好外部的NFS服务器 部署 Helm部署nginx-ingress应用&#xff1a; 添加下载ingress 拉取 解开并修改 部署 测试 回收 helm部署metrics-server&#xff1a; 清除之前的metrics部署 下载…...

OGG-00918 映射中缺少键列 id.

2024-02-23 14:54:49 INFO OGG-02756 从线索文件获取了表 GISTAR.PXPH_PON_ROUTE 的定义。. The following columns did not default because of type mismatches: id OGG-00918 映射中缺少键列 id. 目标端有字段ID&#xff0c;由于mysql自增&#xff0c;所以只能是b…...

QT_day4

1.思维导图 2. 输入闹钟时间格式是小时:分钟 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);id startTimer(1000);flag1;speecher new QTextT…...

Spring Boot应用集成Actuator组件以后怎么自定义端点暴露信息

一、 前言 在平时业务开发中&#xff0c;我们往往会在spring Boot项目中集成Actuator组件进行系统监控&#xff0c;虽然Actuator组件暴露的端点信息已经足够丰富了&#xff0c;但是特殊场景下&#xff0c;我们也需要自己暴露端点信息&#xff0c;此时应该怎么操作呢&#xff1…...

C# CAD备忘录

Document doc Application.DocumentManager.MdiActiveDocument; Database db doc.Database; Editor ed doc.Editor; 1、获取打开cad文件-文件路径 string fileName db.Filename;//文件名 输出结果 fileName “L:\目录\200401.dwg” 2、获取打开cad文件-文件名称 string fi…...

Windows平台QT BLE开发避坑指南:从环境搭建到稳定通信

1. Windows平台QT BLE开发环境搭建 在Windows平台上使用QT进行BLE开发&#xff0c;首先需要确保开发环境正确配置。我遇到过不少开发者因为环境问题卡在第一步&#xff0c;白白浪费好几天时间。这里分享几个关键点&#xff1a; 编译器选择是第一个坑。实测发现必须使用MSVC编译…...

UABEA:终极跨平台Unity资源编辑器,免费解锁游戏资源分析新境界

UABEA&#xff1a;终极跨平台Unity资源编辑器&#xff0c;免费解锁游戏资源分析新境界 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA UABEA&#xff08;Unity Asset Bundle Extractor Avalonia&#…...

Token工厂:从“卖流量”到“卖Token”:中国移动砸百亿建Token生态,三大运营商的AI战争升级,阿里,百度,华为,字节跟进

5月9日&#xff0c;2026移动云大会上&#xff0c;中国移动市场经营部总经理邱宝华扔出一个新概念——"Token运营体系"。未来3-5年&#xff0c;中国移动将投入百亿级Token生态资源&#xff0c;建设千亿级算力基础设施&#xff0c;携手共创万亿级AI产业价值。"百亿…...

Bifrost:轻量高效的实时数据同步平台架构与实战

1. 项目概述&#xff1a;Bifrost&#xff0c;一个被低估的现代数据同步利器如果你正在处理跨数据库、跨数据源的数据同步任务&#xff0c;并且对传统ETL工具的笨重、配置复杂感到头疼&#xff0c;那么maximhq/bifrost这个项目绝对值得你花时间深入了解。我第一次接触Bifrost是在…...

基于RP2040与CircuitPython的键盘内嵌DOOM游戏启动器DIY指南

1. 项目概述与核心思路几年前&#xff0c;我还在用笨重的全尺寸键盘时&#xff0c;就总琢磨着怎么给这每天摸上八小时的家伙加点“私货”。直到后来玩起了RP2040和CircuitPython&#xff0c;一个念头就冒出来了&#xff1a;能不能把游戏直接“焊”进键盘里&#xff1f;不是那种…...

避坑指南:在Unity 2022 LTS中配置XCharts插件时遇到的3个常见问题及解决方法

Unity 2022 LTS中XCharts插件实战避坑手册 当数据可视化成为现代应用的核心需求时&#xff0c;Unity开发者常会选择XCharts这类开源图表插件来快速实现专业级图表展示。但在实际项目落地过程中&#xff0c;版本兼容性、环境配置和平台适配等问题往往会让开发进程意外卡壳。本文…...

【独家首发】ElevenLabs乌尔都语语音SDK逆向分析(v2.4.1):提取未文档化emotion_intensity参数,实现新闻播报级庄严语调控制

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs乌尔都语语音SDK逆向分析全景概览 ElevenLabs 官方未公开乌尔都语&#xff08;ur-PK&#xff09;的独立语音 SDK&#xff0c;但其 Web API 实际支持该语言的 TTS 合成。通过对官方 JS SDK&am…...

ARM Cortex-X系列处理器参数配置与性能优化指南

1. ARM Cortex-X系列处理器参数配置概述在移动计算和嵌入式系统领域&#xff0c;ARM Cortex-X系列处理器代表了ARM架构中的高性能核心设计。作为芯片设计工程师&#xff0c;我经常需要对这些处理器的参数进行精细调整&#xff0c;以实现最佳的性能和能效平衡。处理器参数配置本…...

告别手动点点点:用CAPL脚本实现CANoe诊断自动化测试(附VIN码读取与文件写入完整代码)

告别手动点点点&#xff1a;用CAPL脚本实现CANoe诊断自动化测试&#xff08;附VIN码读取与文件写入完整代码&#xff09; 在汽车电子测试领域&#xff0c;诊断功能验证是每个测试工程师的日常必修课。想象一下这样的场景&#xff1a;你需要反复验证几十个ECU的VIN码读取功能&am…...

锂电池安全使用指南:从原理到实践,避免常见风险

1. 项目概述&#xff1a;从“能用”到“用好”的锂电安全课如果你玩过任何需要脱离电源线工作的电子项目&#xff0c;无论是给一个Arduino小车供电&#xff0c;还是驱动一架四轴飞行器&#xff0c;最终都绕不开一个核心问题&#xff1a;电源。从最基础的碱性电池&#xff0c;到…...