运行 python 来自 crontab 的 virtualenv 中的方法

Run python method in virtualenv from crontab

我目前正在努力研究如何通过 crontab 在虚拟环境中 运行 来自 python 文件的方法。

我有一个如下所示的目录:/home/ubuntu/project 有文件 file.py 以及其中的文件夹 venv。在 file.py 中有一个 method() 我想通过 crontab 定期执行,使用 python 和虚拟环境的依赖项。

我已经知道我需要在虚拟环境中使用 python,所以不用

python3

我用

/home/ubuntu/project/venv/bin/python3.

现在,我也找到了如何从命令行 运行 方法的问题的答案,即 via

python3 -c 'import foo; print foo.hello()'.

我曾尝试将两者结合起来,但不幸的是

/home/ubuntu/project/venv/bin/python3 -c 'import /home/ubuntu/project/file; print(file.method())'

语法无效。还有

/home/ubuntu/project/venv/bin/python3 -c 'from /home/ubuntu/project/ import file; print(file.method())'

只会导致错误。另一方面,

/home/ubuntu/project/venv/bin/python3 -c 'import file; print(file.method())'

导致找不到文件。

如何正确执行此操作?

非常感谢您考虑这个问题。

import 的参数不是文件名。最简单的解决方法可能是 cd 进入目录,然后 运行 使用虚拟环境的 Python 解释器的脚本。

42 17 * * * cd project && ./venv/bin/python3 -c 'import file; file.method()'

来自主目录为 /home/ubuntu.

的用户的 crontab

更一般地说,您要从中导入的目录需要在您的 PYTHONPATH 上,因此您可以等效地将其设置为目录而不是 cd。第三种方法是将 file.py 中的代码制作成可安装的模块,并将其安装在虚拟环境中。对于一次性的,这可能是一件不必要的苦差事,但它绝对是最稳健和可持续的解决方案。