我想设置一个crontab来运行Python脚本。
说脚本是这样的:
#!/usr/bin/python
print "hello world"
有什么办法可以指定要在其中运行的Python脚本的virtualenv吗?在外壳中,我只想做:
~$ workon myenv
我可以在crontab中做等效的事情来激活virtualenv吗?
Answers:
如果使用“ workon”,则实际上是在使用“ virtualenv包装器”,这是位于virtualenv之上的另一层抽象。可以通过将CD转到您的virtualenv根目录并运行以下命令来激活virtualenv:
source bin/activate
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
source
在cron行中进行操作,因为它是一种bashism,因此将无法正常工作,因为cron将用于/bin/sh
执行您的命令。
另一种对我有效的解决方案...
0 9 * * * /path/to/virtenv/bin/python /path/to/cron_script.py
我更喜欢直接从virtualenv使用python ...
.pth
虚拟环境中添加具有virtual_env_folder/lib/python3.3/site-packages/app_name.pth
应用程序位置的文件stackoverflow.com/a/10739838/1082673