Con*_*ion 69 python cron virtualenv virtualenvwrapper
我想设置一个crontab来运行Python脚本.
说脚本是这样的:
#!/usr/bin/python
print "hello world"
Run Code Online (Sandbox Code Playgroud)
有没有办法为这个Python脚本指定一个virtualenv来运行?在shell中,我只是这样做:
~$ workon myenv
Run Code Online (Sandbox Code Playgroud)
我可以在crontab中做些什么来激活virtualenv吗?
Mik*_*ton 97
另一个适合我的解决方案......
0 9 * * * /path/to/virtenv/bin/python /path/to/cron_script.py
Run Code Online (Sandbox Code Playgroud)
我更喜欢直接从virtualenv使用python ...
And*_*ite 82
如果您正在使用"workon",那么您实际上正在使用"virtualenv wrapper",这是另一层位于virtualenv之上的抽象层.可以通过cd到你的virtualenv根目录并运行来激活virtualenv:
source bin/activate
Run Code Online (Sandbox Code Playgroud)
workon是由virtualenv包装器提供的命令,而不是virtualenv,并且它执行一些额外的东西,这对于简单的virtualenv来说不一定是必需的.您真正需要做的就是在virtualenv根目录中获取bin/activate文件以"激活"virtualenv.
您可以设置crontab以调用执行此操作的bash脚本:
#! /bin/bash
cd my/virtual/env/root/dir
source bin/activate
# virtualenv is now active, which means your PATH has been modified.
# Don't try to run python from /usr/bin/python, just run "python" and
# let the PATH figure out which version to run (based on what your
# virtualenv has configured).
python myScript.py
Run Code Online (Sandbox Code Playgroud)
使用bash,您可以创建一个通用的虚拟环境包装器,您可以使用它来调用任何命令,就像time包装任何命令一样.
virt_env_wrapper.bash:#!/bin/bash
source path/to/virtual/env/bin/activate
"$@"
Run Code Online (Sandbox Code Playgroud)
Bash的魔法咒语"$@"重新逃脱原始命令行上的所有令牌,这样如果你要调用:
virt_env_wrapper.bash python foo.py bar 'baz blap'
Run Code Online (Sandbox Code Playgroud)
foo.py将看到sys.argv的['bar', 'baz blap']