![](/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.