从 crontab 在 vi​​rtualenv 中运行 python 方法

Posted

技术标签:

【中文标题】从 crontab 在 vi​​rtualenv 中运行 python 方法【英文标题】:Run python method in virtualenv from crontab 【发布时间】:2021-07-01 07:24:14 【问题描述】:

我目前正在努力解决如何通过 crontab 在虚拟环境中从 python 文件运行方法。

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

我已经想通了,我需要在虚拟环境中使用python,所以不要

python3

我用

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

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

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())'

导致找不到文件。

我该如何正确地做到这一点?

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

【问题讨论】:

【参考方案1】:

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

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

来自主目录为/home/ubuntu的用户的crontab

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

【讨论】:

以上是关于从 crontab 在 vi​​rtualenv 中运行 python 方法的主要内容,如果未能解决你的问题,请参考以下文章

cx_freeze 在 vi​​rtualenv 中缺少 distutils 模块

为啥我不能让 `pip install lxml` 在 vi​​rtualenv 中工作?

pip install mod_wsgi 在 vi​​rtualenv 中失败

crontab -e 的编辑器设置为vi编辑器?

关于vi crontab和crontab -e的差别

从报错no crontab for user/ vi exit with status 1看crontab