返回错误“OSError:no此类文件或目录”。我们尝试使用带有shellCommand的构建器中的步骤激活我们新创建的虚拟env venvCI。我们不能激活virtualenv venvCI。在这种环境中只是新的,所以请帮助我们。谢谢。
from buildbot.steps.shell import ShellCommand
factory = util.BuildFactory()
# STEPS for example-slave:
factory.addStep(ShellCommand(command=['virtualenv', 'venvCI']))
factory.addStep(ShellCommand(command=['source', 'venvCI/bin/activate']))
factory.addStep(ShellCommand(command=['pip', 'install', '-r','development.pip']))
factory.addStep(ShellCommand(command=['pyflakes', 'calculator.py']))
factory.addStep(ShellCommand(command=['python', 'test.py']))
c['builders'] = []
c['builders'].append(
util.BuilderConfig(name="runtests",
slavenames=["example-slave"],
factory=factory))
答案 0 :(得分:2)
由于构建系统为每个ShellCommand创建一个新Shell,因此只能修改活动shell的环境。source env/bin/activate
当Shell(Command)退出时,环境就消失了。
你可以做的事情:
为每个ShellCommand手动提供环境(阅读内容
activate
确实)env={...}
创建一个运行所有命令的bash脚本 一个shell(我在其他系统中所做的)
e.g。
myscript.sh:
#!/bin/bash
source env/bin/activate
pip install x
python y.py
Buildbot:
factory.addStep(ShellCommand(command=['bash', 'myscript.sh']))
答案 1 :(得分:2)
另一种选择是直接在虚拟环境中调用python可执行文件,因为许多提供命令行命令的Python工具通常可以作为模块执行:
from buildbot.steps.shell import ShellCommand
factory = util.BuildFactory()
# STEPS for example-slave:
factory.addStep(ShellCommand(command=['virtualenv', 'venvCI']))
factory.addStep(ShellCommand(
command=['./venvCI/bin/python', '-m', 'pip', 'install', '-r', 'development.pip']))
factory.addStep(ShellCommand(
command=['./venvCI/bin/python', '-m', 'pyflakes', 'calculator.py']))
factory.addStep(ShellCommand(command=['python', 'test.py']))
然而,一段时间后这确实令人厌烦。您可以使用string.Template
来制作帮助者:
import shlex
from string import Template
def addstep(cmdline, **kwargs):
tmpl = Template(cmdline)
factory.addStep(ShellCommand(
command=shlex.split(tmpl.safe_substitute(**kwargs))
))
然后你可以这样做:
addstep('$python -m pip install pytest', python='./venvCI/bin/python')
这些是一些入门的想法。请注意,关于shlex
的简洁之处在于它在进行拆分时会尊重引用字符串中的空格。