#环境 #脚本 #可执行文件 #状态 #内部 #创建 #运行

bin+lib viva

透明地创建环境和运行其中的可执行文件

3 个版本

0.0.3 2023 年 4 月 18 日
0.0.2 2023 年 4 月 13 日
0.0.1 2023 年 4 月 11 日

#372 in 操作系统

自定义许可协议

70KB
1.5K SLoC

viva

一个通用的环境封装器和(未来)脚本解释器。

该项目处于非常早期的 alpha 阶段,其主要目的是作为我正在工作的另一个项目的库。话虽如此,我认为我希望它封装的这种模式对于其他/类似情况可能是有用的,这就是为什么它作为一个独立的项目发布。

总的来说,这只是一个围绕出色的 'rattler' 库 的薄层包装,大部分有趣的事情都发生在这里。因此,在大多数情况下,我建议直接使用该库。

当前(已知)问题

  • 没有包版本支持
  • 应用程序不在激活的环境中运行,因此如果(conda)包依赖于(例如)填充的环境变量(如激活此类环境时所为),那么它将失败
  • 使用新规范更新环境有时会使环境处于不可用状态

用法

示例

创建/确保环境存在

# install the 'cookiecutter' package into the 'default' environment (if not already there)
viva -c conda-forge -s cookiecutter apply

在环境中运行命令

# install the 'cookiecutter' package into an environment called 'project-templates' (if not already there), then run it
# note the '--' to separate the viva arguments from the command arguments
viva -e project-templates -c conda-forge -s cookiecutter run -- cookiecutter --help

列出可用的环境

# list all existing environments
viva list-envs

删除环境

# delete the environment called 'project-templates'
viva -e project-templates remove

环境

每个环境都位于所谓的 '目标前缀' 中,其中所有(嗯,大部分,如果理解正确)文件都被硬链接到,这意味着如果你创建了 2 个或更多具有相同包的环境,所使用的空间将等于一个(加上一些小的文件系统元数据)。

此外,每个环境都有一个规范(json)文件,记录了创建它所使用的通道,以及哪些包(matchspecs)。

环境的位置和规范文件的位置取决于操作系统以及如何指定环境(见下文)。

如果环境被指定为表示别名的简单字符串

  • 环境位于(操作系统相关)用户数据目录下,加上 viva list-envs 来查看实际路径),以及 viva/envs/
  • 环境规范文件位于(操作系统相关)用户配置目录下,加上 viva/envs/

否则

  • 在命令行参数中指定了target-prefix和环境规范文件,它们将在那里被创建

目前,我只对前者感兴趣,后者只是做了简略实现,但我不想关闭这种灵活性的大门。

-e / --env 命令行参数中的环境规范

viva 中,可以通过env-spec字符串以几种不同的方式指定环境。 viva 将按照以下顺序解析字符串,第一个匹配项将决定环境所在的位置

  • 如果字符串包含(操作系统特定的)路径分隔符(如在Posix中是 /,在Windows中是 '')
    • 该字符串将被解释为相对路径或绝对路径
      • 如果该路径指向一个现有文件,那么将读取该文件,并将其内容解释为环境的规范数据
      • 如果该路径指向一个现有目录,或者不存在,环境将在此目录下创建
  • 如果没有找到路径分隔符,并且字符串不包含除字母数字字符和 _ 之外的其他字符
    • 该字符串将被解释为环境别名,环境将在此别名下在(也具有操作系统特定的)用户数据目录下创建

特性(当前 & 计划)

  • 创建环境
  • 合并环境
  • 删除环境
  • 列出环境
  • 激活环境
  • 细粒度的包规范(包括版本控制)
  • viva 脚本解释器
  • 花括号bash脚本模板和生成器

本项目遵循MPL v2.0 & BSD-3条款许可,有关许可证文本,请查看此存储库中的 LICENSES 文件。

代码在 src/rattler 目录下

  • 版权 (c) 2023 Bas Zalmstra
  • 许可证:BSD-3 条款

其他一切

  • 版权 (c) 2023 Markus Binsteiner
  • 许可证:MPL v2.0

依赖项

~88MB
~1.5M SLoC