通过powershell脚本更改Conda环境(适用于Gitlab CI)

通过powershell脚本更改Conda环境(适用于Gitlab CI),powershell,conda,gitlab-ci,Powershell,Conda,Gitlab Ci,我正在Windows 10机器上使用GitLab CI运行一些自动化Python测试。计算机上的GitLab Runner过去使用简单的Windows shell与执行器=“shell”一起工作。这项功能最近停止工作(文档称已不再支持此shell),而让它再次工作的唯一方法是使用powershell,将shell=“powershell”添加到我们的config.toml文件中。为了运行测试,我们需要激活conda环境。不幸的是,通过GitLab CI为作业创建的powershell脚本,这似乎

我正在Windows 10机器上使用GitLab CI运行一些自动化Python测试。计算机上的GitLab Runner过去使用简单的Windows shell与执行器=“shell”一起工作。这项功能最近停止工作(文档称已不再支持此shell),而让它再次工作的唯一方法是使用powershell,将
shell=“powershell”
添加到我们的
config.toml
文件中。为了运行测试,我们需要激活conda环境。不幸的是,通过GitLab CI为作业创建的powershell脚本,这似乎不起作用

当我以执行gitlab runner作业的用户身份手动登录打开powershell时,更改conda环境会起作用。我已经运行了
conda init powershell
,可以使用
conda activate myenv
更改环境。然而,当我在我的
gitlab ci.yml
文件中包含以下内容时:

script:
  - conda activate myenv
  - conda list
conda list
的输出确认未激活环境
myenv
,而是使用基本环境

也在尝试这样的绝对路径

script:
  - conda activate C:\Users\myuser\Miniconda3\envs\myenv
  - conda list
不起作用


因此,我似乎可以在powershell中手动激活正确的conda环境,但通过GitLab CI创建的powershell脚本激活环境不起作用。这个问题有解决办法吗?非常感谢您的帮助。

看起来gitlab在一个单独的子shell中执行脚本的每一行。将命令组合成一行

如果这不起作用,大多数
conda
命令将接受环境名称作为参数
-n

conda list -n myenv
conda install -n myenv PackageName
...

只要您使用的是
conda
,就不必激活环境。

因为这似乎是powershell中的问题,而不是
cmd
,所以可以在gitlab ci yaml中使用以下内容:

- cmd '/C' 'conda activate myenv && python myunittests.py'

谢谢你的回答!当我运行
conda时,激活myenv;在powershell中手动获取conda列表
,我从C:\Users\myuser\Miniconda3\envs\myenv:环境中的包开始获取预期输出。不幸的是,当我包含
-conda激活myenv;在my
.gitlab ci.yml
文件中的conda list
仍在基本环境中执行,从C:\Users\myuser\Miniconda3:环境中的包开始输出。我是不是遗漏了什么?奇怪。不幸的是,我缺少使用PowerShell和GitLab CI的实践经验。我已经用一个新的建议更新了我的答案,这个建议不依赖于这两个。非常感谢你的帮助!您更新的答案完美地解决了问题
conda list-n myenv
.gitlab ci.yml
中使用时确实提供了预期的输出。另外,我能够在正确的环境中使用
conda run-n myenv python myunittests.py
“conda run-n myenv python…”运行单元测试帮助很大,即使在Gitlab CI中的Windows Docker文件上也是如此。但是,此处命令的输出未显示在Gitlab CI作业日志中。。。?