这是一个稍微更完整的答案,基于 Donal 和 betapatch 的答案,它允许您在两个执行类似操作的模块之间进行交换:
if { [module-info mode load] || [module-info mode switch2] } {
puts stdout "source /programs/program-env/bin/activate;"
} elseif { [module-info mode remove] && ![module-info mode switch3] } {
puts stdout "deactivate;"
}
首先,您需要使用source .../activate
而不仅仅是.../activate
.
其次,在ping 模块modules
时有一些可怕的逻辑。swap
如果您想module swap foo bar
(删除foo
并加载bar
到它的位置),它实际上会执行以下操作:
foo: switch1 # prep for remove
foo: remove # actually remove
bar: switch2 # load new module
foo: switch3 # cleanup
foo: remove # happens at the same time as foo switch3
这意味着如果foo
和bar
都是使用 virtualenvs 的模块文件,则第二个foo remove
将deactivate
bar
.