79

Python スクリプトを実行するように crontab をセットアップしたいと考えています。

スクリプトが次のようなものだとします。

#!/usr/bin/python
print "hello world"

その Python スクリプトを実行するための virtualenv を指定する方法はありますか? シェルでは、次のようにします。

~$ workon myenv

virtualenvをアクティブにするためにcrontabでできることはありますか?

4

4 に答える 4

118

私にとってうまくいく別の解決策...

0    9    *    *    *    /path/to/virtenv/bin/python /path/to/cron_script.py

virtualenv から直接 python を使用することを好みます...

于 2012-10-11T21:00:20.643 に答える
84

「workon」を使用している場合、実際には「virtualenv ラッパー」を使用しています。これは、virtualenv の上にある別の抽象化レイヤーです。virtualenv 単独で、virtualenv ルート ディレクトリに cd して次のコマンドを実行することでアクティブ化できます。

source bin/activate

workon は、virtualenv ではなく、virtualenv ラッパーによって提供されるコマンドであり、プレーンな virtualenv に必ずしも必要ではない追加の機能を実行します。実際に行う必要があるのは、virtualenv ルート ディレクトリにある bin/activate ファイルを入手して、virtualenv を「アクティブ化」することだけです。

これを行う bash スクリプトを呼び出すように crontab をセットアップできます。

#! /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
于 2010-11-11T01:28:18.510 に答える
9

bash を使用すると、任意のコマンドをラッパーする方法と同じように、任意のコマンドを呼び出すために使用できる汎用の仮想環境ラッパーを作成できますtime

virt_env_wrapper.bash:

#!/bin/bash    
source path/to/virtual/env/bin/activate
"$@"

Bash の魔法の呪文"$@"は、元のコマンド ラインのすべてのトークンを再エスケープします。

virt_env_wrapper.bash python foo.py bar 'baz blap'

foo.pysys.argvの_['bar', 'baz blap']

于 2015-05-13T18:04:38.900 に答える