我们可以在箱子安装期间下载一些东西并设置环境变量吗?
Can we download something & set environment variable during crate installation?
作为 Rust 驱动程序 crate 开发人员,我想在我的 crate installation/download 被任何其他 Rust 程序使用时执行以下步骤:
- 检查平台,即 Windows 或 UNIX 或 macOS。
- 从外部网站下载相应的特定于平台的二进制文件。
- 设置指向下载位置的环境变量。
我知道这在 Node 或 Python 或 R 中是可行的,但不确定在 Rust 中是否可行。
您可以使用 Build script 来实现(但这不是您应该做的,请参阅下面的注释)。
脚本将在 cargo 开始构建您的库之前编译并执行。
- 在脚本中您可以使用 cfg attribute 检查平台。
- 有很多库可以通过 HTTP 下载一些东西,例如 reqwest
- 您可以通过cargo:rustc-env=VAR=VALUE
设置环境变量
重要提示
大多数 Rust 用户并不期望构建脚本会出现这种行为。该方法可能存在许多问题。我脑海中只有几个:
- 首先可能存在安全问题。
- 该方法会破坏客户端的构建。
我认为最好将您需要的所有二进制文件作为箱子的一部分上传。您可以为此使用 include_bytes!。
作为 Rust 驱动程序 crate 开发人员,我想在我的 crate installation/download 被任何其他 Rust 程序使用时执行以下步骤:
- 检查平台,即 Windows 或 UNIX 或 macOS。
- 从外部网站下载相应的特定于平台的二进制文件。
- 设置指向下载位置的环境变量。
我知道这在 Node 或 Python 或 R 中是可行的,但不确定在 Rust 中是否可行。
您可以使用 Build script 来实现(但这不是您应该做的,请参阅下面的注释)。
脚本将在 cargo 开始构建您的库之前编译并执行。
- 在脚本中您可以使用 cfg attribute 检查平台。
- 有很多库可以通过 HTTP 下载一些东西,例如 reqwest
- 您可以通过cargo:rustc-env=VAR=VALUE 设置环境变量
重要提示
大多数 Rust 用户并不期望构建脚本会出现这种行为。该方法可能存在许多问题。我脑海中只有几个:
- 首先可能存在安全问题。
- 该方法会破坏客户端的构建。
我认为最好将您需要的所有二进制文件作为箱子的一部分上传。您可以为此使用 include_bytes!。