如何为 Git 仓库的不同分支创建不同的 conda 环境?



我目前正在Git存储库中处理一个项目,该项目有几个不同的分支。我想设置两个不同的 conda 环境,每个环境都使用这个存储库的不同分支中的代码。

我希望这些环境中的每一个都是完全独立的,因为我在计算群集上运行我的项目,并希望同时对在存储库的不同分支上运行的多个作业进行排队。

更具体地说,我的存储库的组织方式如下

my-repo/
master
issue-fix
additional-feature

我想创建一个名为env1的 conda 环境,它使用issue-fix中的代码以及其他一些包。然后,我想创建另一个名为env2的环境,该环境使用additional-feature中的代码以及相同的其他包。

签出分支issue-fix中的代码后,我尝试运行以下命令来创建这两个环境:

conda create -n env1
source activate env1
conda install <my other packages>
pip install -e git+file:///path/to/repo@issue-fix#egg=repo-0.1
source deactivate
conda create -n env2
source activate env2
conda install <my other packages>
pip install -e git+file:///path/to/repo@additional-feature#egg=repo-0.1

然而,在环境env2中,分支additional-feature中的代码是无法访问的。我应该如何设置这两个环境?

这实际上是一个非常有趣的问题,我现在遇到了这个问题。我有一个存储库,其中包含两个非常活跃的开发分支,我需要经常来回切换。分支具有不同的编译代码(Fortran & C(版本,这意味着每次git checkout <branch>时都需要重新编译代码。至少可以说不是最佳选择。

我想有两个 conda 环境,每个环境中安装一个不同的分支。我希望运行两个 python 内核,一个从每个 conda env 启动,并且能够在两个内核中测试(运行代码(,而无需切换分支(只有我工作的窗口(。

我最终所做的是在单独的测试目录下克隆存储库两次,这两个目录都与主存储库的主开发目录分开,检查每个目录中的不同分支并将每个分支安装在单独的 conda 环境中。

只要我不接触每个测试目录中的主分支,我就可以在准备好时推送上游并合并。

我知道这是一个老问题,但我最近一直在尝试做同样的事情,发现您可以通过向 pip install 命令添加--src <target-repo-directory>来指定存储库的目录。然后,使用不同的目标目录将允许您在不同的 conda 虚拟环境中安装不同的分支(您可以与pip list确认(。

对于上面的示例,您需要:

mkdir /path/to/issue-fix-branch
mkdir /path/to/additional-feature-branch
conda create -n env1
source activate env1
conda install <my other packages>
pip install --src /path/to/issue-fix-branch -e git+file:///path/to/repo@issue-fix#egg=repo-0.1
source deactivate
conda create -n env2
source activate env2
conda install <my other packages>
pip install --src /path/to/additional-feature-branch -e git+file:///path/to/repo@additional-feature#egg=repo-0.1