Rust - Packages 和 Crates有什么区别呢?

本文详细解析了Rust编程中的Crate和Package概念。Crate是代码组织的基本单位,可以是二进制或库,作为Package的一部分发布。Package是Crate的集合,可包含多个二进制Crate,且是发布到crates.io仓库的基本单元。尽管crates.io名为crates,但实际托管的是packages。在依赖管理中,我们通常引用的是package,而非特定的crate。
摘要由CSDN通过智能技术生成

很多语言有 Package 的概念,Rust 也有,除此之外,更常见的是 Crate。有一个常见的误解:packages 和 crates 是一样的。

1.关于Crate

一个 crate,类似 crate 中的模块,是一种代码组织的方式。

一个 crate,可以是一个二进制(可执行)或库。

一个 crate ,不会独立发布,而是作为 package 的成员发布。

编译器知道 crate 是什么,并使用 create 作为项目的命名空间。如果不在作用域内,你可以通过类似这样的调用 std:#️⃣:Hash 定义自己的 trait。

2.关于Package

一个 package ,是至少一个 crate 的包装器。package 是可发布的。

一个 package ,可以包含 0 或 1 个库 create。

一个 package ,可以包含任意数量的二进制 create。

将 package 加入依赖时,意味着使用 package 中的一个 create。

当你使用 cargo run 或 cargo install 而指定具体的 crate 时,意味着执行 package 中的一个二进制 crate。

当 cargo run --bin 或 cargo install --bin 后跟一个 crate 名称时,意味着使用 package 中这个特定的 crate。

3.为什么会误解呢?

主要因 crates.io 导致的。虽然叫做 crates.io,实际上它是 packages 的仓库。你通过 crates.io 找到了某个库,会将 package 加入 Cargo.toml 依赖中,你不需要指定具体的 crate,因为 package 只能有一个库 crate。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ImportError: dlopen(/Users/red/Library/Python/3.9/lib/python/site-packages/_cffi_backend.cpython-39-darwin.so, 0x0002): tried: '/Users/red/Library/Python/3.9/lib/python/site-packages/_cffi_backend.cpython-39-darwin.so' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/red/Library/Python/3.9/lib/python/site-packages/_cffi_backend.cpython-39-darwin.so' (no such file), '/Users/red/Library/Python/3.9/lib/python/site-packages/_cffi_backend.cpython-39-darwin.so' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64'))thread '<unnamed>' panicked at 'Python API call failed', /Users/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/pyo3-0.18.3/src/err/mod.rs:790:5note: run with `RUST_BACKTRACE=1` environment variable to display a backtraceTraceback (most recent call last): File "/usr/local/project/red/python/memory.py", line 3, in <module> import paramiko File "/Users/red/Library/Python/3.9/lib/python/site-packages/paramiko/__init__.py", line 22, in <module> from paramiko.transport import ( File "/Users/red/Library/Python/3.9/lib/python/site-packages/paramiko/transport.py", line 33, in <module> from cryptography.hazmat.primitives.ciphers import algorithms, Cipher, modes File "/Users/red/Library/Python/3.9/lib/python/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py", line 11, in <module> from cryptography.hazmat.primitives.ciphers.base import ( File "/Users/red/Library/Python/3.9/lib/python/site-packages/cryptography/hazmat/primitives/ciphers/base.py", line 10, in <module> from cryptography.exceptions import ( File "/Users/red/Library/Python/3.9/lib/python/site-packages/cryptography/exceptions.py", line 9, in <module> from cryptography.hazmat.bindings._rust import exceptions as rust_exceptionspyo3_runtime.PanicException: Python API call failed
07-08
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值