Azure管道命令行代理作业似乎忽略了python环境激活后的命令?

时间:2019-09-28 06:17:37

标签: python windows azure-pipelines python-venv

我正在使用。 Azure管道命令行代理作业中的代码。但是Venv_Project\scripts\activate之后的命令不会显示在输出中。可能是什么问题?

ECHO START
SET var=%cd%
ECHO %var%
python -m venv Venv_Project
SET var=%cd%
ECHO %var%
ECHO Venv created and now activating
Venv_Project\scripts\activate
SET var=%cd%
ECHO %var%
ECHO END

2 个答案:

答案 0 :(得分:0)

  

Azure管道命令行代理作业似乎忽略了python环境激活后的命令?

我可以一边重现此问题。为了进一步验证该命令是否已执行,还是已执行但未显示在输出中。

我创建了一个简单的python脚本来创建.txt文件,因此我们可以通过验证.txt文件的存在来验证命令是否已执行:

file = open('D:/a/1/s/Test.txt', 'w');
file.write('hello, \n world!')

当我在不激活python环境的情况下使用私有代理构建命令行任务时,它成功创建了.txt文件。但是,如果我激活python环境激活,它将不会创建该文件。

因此,这进一步确定该命令未与Azure devops一起执行。但是我无法进一步找出Azure devops无法在python虚拟环境中执行命令的原因。

要解决此问题,建议您在开发者社区中报告此问题:

https://developercommunity.visualstudio.com/spaces/21/index.html

这是我们针对产品​​问题的主要论坛。感谢您帮助我们构建更好的Azure DevOps。

希望这会有所帮助。

答案 1 :(得分:0)

Venv_Project\scripts\activate替换为call Venv_Project\scripts\activate

参考:https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/command-line?view=azure-devops&tabs=yaml#running-batch-and-cmd-files

  

运行批处理和.CMD文件

     

Azure Pipelines将您的内联脚本放入   内容放入临时批处理文件(.cmd)中以运行它。什么时候   您要从Windows CMD中的另一个批处理文件运行一个批处理文件,   您必须使用call命令,否则第一个批处理文件是   终止。这将导致Azure Pipelines运行预期的   编写脚本,直到第一个批处理文件,然后运行该批处理文件,   然后结束这一步。第一个脚本中的其他行不会   跑。在执行批处理文件之前,您应该始终先挂起呼叫   一个Azure Pipelines脚本步骤。

     

重要

     

您可能没有意识到自己正在运行批处理文件。例如,在   Windows,以及您使用npm install -g安装的所有工具,   实际上是批处理文件。始终使用呼叫npm运行NPM   Windows中命令行任务中的命令。