![](/img/trans.png)
[英]Shell script invoking python code to be run in a virtualenv from Crontab
[英]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
。
现在,我还找到了如何从命令行运行方法的问题的答案,即通过
python3 -c 'import foo; print foo.hello()'
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
中的代码制作成可安装的模块,并将其安装在虚拟环境中。 对于一次性的,这可能是不必要的苦差事,但它绝对是最强大和可持续的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.