我最近要求解释我无法理解的 Fabric 脚本行为。现在我了解了 Fabric 的工作原理,我仍在努力寻找解决问题的方法 :-)
基本上,我想嵌套一个cd()
调用,一个prefix()
调用(将从当前路径加载一些东西)和另一个cd()
调用最终run()
评论。
我想到的最好的例子如下:
with cd('/my/virtualenv/dir/'):
with prefix('source bin/activate'):
with cd('/my/project/dir/'):
run('pip install -r requirements.txt')
run('./run_something')
这是行不通的,因为它cd('/my/project/dir')
会优先于cd('/my/virtualenv/dir')
,这将被上下文完全覆盖。
我能看到的唯一解决方案是将前 3 行连接到一个 uniqueprefix()
中,用 s 分隔,&&
但它对我来说真的很骇人:
with prefix('cd /my/virtualenv/dir/ && source bin/activate && cd /my/project/dir/'):
run('pip install -r requirements.txt')
run('./run_something')
是否有另一种/更优雅的方式来做到这一点?“更优雅”是指使用 Fabric 方法而不是我的 hack 的解决方案。
当然,对于这个特定的示例,我可以使用 virtualenvwrapper,但是它变得过于具体,并且不适用于其他不基于 virtualenv 的类似情况。