ben*_*min 5 packaging continuous-deployment conda
我想要两个环境:一个生产环境,它是测试环境的严格子集。如何使用 Conda(或 micromamba)实现此目的?
测试需要一些额外的实用程序,这些实用程序不需要捆绑在生产 Docker 映像中。主要思想是确保生产安装中的子依赖项与配套环境中测试的版本完全相同。
可能性示例:
Conda 不以任何有用的方式直接支持嵌套环境。但是,有一些定义明确的步骤可以生成具有相同版本的通用包的环境。以下是一种可能的程序。
为了给出一个具体的示例,以及使用 Conda 的通用性(不是以 Python 为中心)的示例,让我们考虑一个R 包的开发项目。假设我们有两组需求:
需求.prod.txt
r-base=4.0
r-magrittr
r-dplyr
Run Code Online (Sandbox Code Playgroud)
需求.test.txt
r-testthat
r-usethis
Run Code Online (Sandbox Code Playgroud)
以下命令将创建两个环境,其中测试环境 ( pkg_test ) 将是生产环境 ( pkg_prod ) 的超集:
## first, use Mamba if you aren't already
## conda install -n base conda-forge::mamba
## create the dev environment
mamba create -n pkg_prod --file requirements.prod.txt
## create the test environment as a clone
mamba create --clone pkg_prod -n pkg_test
## install the additional requirements, without updating pkgs
mamba install -n pkg_test --freeze-installed --file requirements.test.txt
Run Code Online (Sandbox Code Playgroud)
如果您更改需求,最好是重新创建环境。我推荐 Mamba,因为它可以最大限度地缩短求解时间,在出现问题时提供更精确的诊断,并且很少给出令人惊讶的求解结果。