gradle 与 conda 和 pyenv 的交互

gradle interactions with conda and pyenv

我有一个简单的 gradle 任务需要 python 完成一些部署工作。但是,它似乎在其 commandLine 调用中使用了任意版本的 python。

task deploy(type: Exec) {
    dependsOn 'clean'
    dependsOn 'build'
    tasks.findByName('build').mustRunAfter 'clean'
    workingDir "$buildDir/deploy/"
    commandLine "which", "python3"
}

产量 /Users/cchow/projects/<project>/venv/bin/python3 如预期。当我 运行 gradle 命令时,我有一个 virtualenv 处于活动状态。

但是,下面会产生意想不到的结果

task deploy(type: Exec) {
    dependsOn 'clean'
    dependsOn 'build'
    tasks.findByName('build').mustRunAfter 'clean'
    workingDir "$buildDir/deploy/"
    commandLine "python3", "-m", "yaml"
}

产量/usr/local/Caskroom/miniconda/base/bin/python3: No module named yaml。我确实安装了 conda,但 conda 安装的优先级应该低于 virtualenvs。根据 env 当通过 commandLine "env" 执行时:

PATH=/Users/cchow/projects/<project>/venv/bin:/usr/local/Caskroom/miniconda/base/condabin:<rest of path>

为什么前者选择 virtualenv py3 而后者选择 conda py3?

我也遇到过这个问题,并找到了解决方法:

project.exec  {
    commandLine "sh", "-c", "python -m foo"
}