运行 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
中的代码制作成可安装的模块,并将其安装在虚拟环境中。对于一次性的,这可能是一件不必要的苦差事,但它绝对是最稳健和可持续的解决方案。
我目前正在努力研究如何通过 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
中的代码制作成可安装的模块,并将其安装在虚拟环境中。对于一次性的,这可能是一件不必要的苦差事,但它绝对是最稳健和可持续的解决方案。