我最近在我的工作地点用cron脚本看到了这个:
/bin/bash -c "[[ -s $HOME/.pythonbrew/etc/bashrc ]] && source $HOME/.pythonbrew/etc/bashrc && pythonbrew use 2.6.7 && pythonbrew venv use someapp && python /opt/someapp/bin/someapp.py"
这适用于Pythonbrew的系统范围(多用户)安装。
有效。但请告诉我有更好的方法。
澄清我正在寻找的东西:我想要一个单行命令来运行我的脚本虽然与pythonbrew绑定了virtualenv。仅凭virtualenv,我就能做到这样的事情:
/opt/someapp/venv/bin/python /opt/someapp/bin/someapp.py
我不想要的是运行我的脚本的另一个脚本(就像上面的cron命令一样)。
答案 0 :(得分:1)
我相信可以直接使用你的pythonbrew
虚拟环境中的python二进制文件来完成。
默认情况下,它位于~/.pythonbrew/venvs/Python-<version>/<name of venv>/bin/python
但我认为你可以用环境变量改变路径。
因此,只需更改您添加的行的前半部分,以引用pythonbrew
虚拟环境python二进制文件,它应该可以正常工作。
答案 1 :(得分:1)
在python脚本的第一行添加一个shebang(#!),后跟一个指向目标python的路径。然后使python脚本可执行。然后可以直接从命令行执行它(crontab,另一个bash脚本,无论如何)。
在临时目录中制作虚拟环境:
$ cd /tmp
$ virtualenv venv
在那个venv中你的python的路径是/ tmp / venv / bin / python
使用编辑器创建一个包含以下所有内容的简单脚本:
#!/tmp/venv/bin/python
print("hello world")
将其作为“mypyscript.py”
保存在您的主目录中使其可执行:
$ chmod 755 mypyscript.py
现在您应该可以直接在命令行上使用文件名执行它:
$ ./mypyscript.py
hello world
对你的someapp.py执行此操作,将相关路径替换为python,这应该可行。
答案 2 :(得分:1)
诀窍是找到pythonbrew virtualenv的python二进制文件。 Mark's answer指出了我正确的方向。但是这里有一个完整的纲要供将来参考:
使用pythonbrew installed,我执行了以下操作(在服务器上为root
):
pythonbrew install 2.6.6
pythonbrew switch 2.6.6
pythonbrew venv create --no-site-packages myapp
我有一个pip冻结文件,所以我使用它设置了virtualenv:
/usr/local/pythonbrew/venvs/Python-2.6.6/myapp/bin/pip install -r /tmp/requirements.pip
现在我的python二进制文件可以在/usr/local/pythonbrew/venvs/Python-2.6.6/myapp/bin/python
找到。所以要运行我的脚本:
/usr/local/pythonbrew/venvs/Python-2.6.6/myapp/bin/python /opt/myapp/bin/myapp.py