如何在bash / Python / Fabric / sh脚本中使用pew?

时间:2014-02-25 15:07:51

标签: python bash shell virtualenv

我最近开始使用pew而不是virtualenvwrapper + virtualenv

在交互式shell中工作时,这是一个不错的选择。但是,我仍然在我的bash脚本中使用virtualenvwrapper [1],我正在考虑编写一些支持virtualenv的Python脚本[2]。

鉴于pew workon启动了一个新提示,我可以在shell [3]和Python脚本中使用它吗?如果是这样,怎么样?

[1]使用以下代码片段,这正是我想要摆脱的:

# make sure we can workon (the path is Ubuntu-specific)
[[ $(type -t workon) == "function" ]] || source /etc/bash_completion.d/virtualenvwrapper

[2]我还在研究哪种普通的Python,Fabricsh最适合我的需要。

[3]偷偷地说,我宁愿在鱼而不是猛击中使用它,但这看起来很深奥:)

1 个答案:

答案 0 :(得分:5)

我个人仅在交互式shell中使用pew,但是有一些命令可用于在一些脚本中使用pew。我们以此为例:

>cat script.sh
#!/bin/bash
which python    

您可以使用in命令在virtualenv中执行任意代码:

pew in env which python
pew in env ./script.sh

(这两个会做同样的事情)

你也可以使用-d标志来避免在创建时激活它,因此你可以在这样的脚本中使用pew:

pew new -d yourenv > /dev/null
pew in yourenv which python

我认为使用像inve这样的东西在shell脚本中没有任何真正的优势:如果你有像

这样的东西
#!/bin/sh
. ~/.virtualenvs/yourenv/bin/activate
which python

采购脚本不会污染执行采购的脚本之外的事情

OTOH:使用pew或virtualenvwrapper可能对执行复制/重命名环境的任务很有用。任何不以invoke(inve) in the pew source code结尾的命令都可以使用,对于其他命令(new,mkproject,mktmpenv,cp)应该有一个--dont-activate标志可用。

(我刚刚意识到cp命令没有-d标志,我可能不得不尽快添加它)

编辑:更多示例

> pew new -d dummy -i e
> pew in dummy python -me 2 "**" 53
dummy:
9007199254740992
> pew in dummy python helloworld.py 
dummy:
helloworld