首页 > 解决方案 > gradle 与 conda 和 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?

标签: pythonshellgradleconda

解决方案


我也遇到过这个问题,并发现这是一种解决方法:

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

推荐阅读