如何从Gradle激活虚拟环境?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

我的gradle.build文件中有以下exec命令。

exec {
        workingDir System.getProperty("user.dir")
        commandLine 'python3.6', 'buildscript.py'
    }
exec {
    workingDir System.getProperty("user.dir")
    commandLine 'python3.6', '-m', 'virtualenv', 'env'
}


exec {
    workingDir System.getProperty("user.dir")
    commandLine 'source', 'env/bin/activate'
}

exec {
    workingDir System.getProperty("user.dir")
    commandLine 'pip3.6', 'install', 'pybuilder'
}

exec {
    workingDir System.getProperty("user.dir")
    commandLine 'pyb', '-E', 'env', '-X'
}

这些都在执行gradle构建时运行的构建任务中。从理论上讲,这应该运行我创建的脚本,创建构建我的python程序所需的所有文件,然后应该创建一个虚拟环境,激活它,安装pybuilder,然后运行pybuilder。但是,命令:

exec {
        workingDir System.getProperty("user.dir")
        commandLine 'source', 'env/bin/activate'
    }

似乎失败了。它声称目录/文件不存在,尽管它通过命令行工作。我不确定为什么会这样。这一点的重点是迫使Pybuilder将我的程序依赖项安装到我创建的虚拟环境中。pyb -E env在技术上应该为我激活虚拟环境,但无论出于何种原因,它都不会将我的依赖项安装到该虚拟环境中。在我们的Jenkins节点上,这是一个问题,因为我们不希望全局安装这些,更不用说,我还没有root用户权限。

任何帮助将非常感激。如果你知道让Pybuilder正常工作的另一种方法,那也同样好。

提问于
用户回答回答于

临时解决方案:我最终创建了一个小shell脚本来创建和激活虚拟环境。然后我从gradle执行该脚本。

用户回答回答于

调用sourceactivate只是做一些外壳魔术线了变数。你不需要总是打电话activate(在这种情况下可能不会)。相反,您应该在您的命令pip3.6pyb前面命令env/bin前面直接调用二进制文件。因此,它会

exec {
   workingDir System.getProperty("user.dir")
   commandLine 'env/bin/pip3.6', 'install', 'pybuilder'
}

exec {
   workingDir System.getProperty("user.dir")
   commandLine 'env/bin/pyb', '-E', 'env', '-X'
}

扫码关注云+社区

领取腾讯云代金券