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