我已经开发了一个python Flask API,并将其部署在aws ebs上。Flask API的工作方式与预期一致。Flask API需要几个python包,我已经将它们添加到:requirements.txt
我还安装了一个python脚本,它是从Flask API中分离出来的py文件。它被安排为每天运行,由cron执行。
当我设置cron时,我得到一个没有找到模块的执行错误:
ModuleNotFoundError: No module named 'pandas'
但是,模块是由requirements.txt
安装的,并且可用于Flask API代码。import pandas
如何与Flask API一起工作,但对由cron执行python脚本不可用?
发布于 2018-10-04 21:03:17
this作业在您的环境之外运行,因此这意味着它们没有您的$PATH
和其他环境变量(在Cron答案中有更广泛的描述),这会导致无法找到某些程序。您应该做的是将Python脚本执行封装在一个bash脚本中,在开始时导出所有需要的环境变量(或者通常让它使用您的环境)。然后,使用cron执行此bash脚本。
发布于 2020-05-05 15:27:05
@arudzinska是对的。我的案例是使用Elastic Beanstalk AWS和cronjob,与pandas有相同的问题(没有名为‘pandas’的模块)。我使用了上面的注释,并尝试找到pandas包的位置,然后找到安装requirements.txt包的python路径,并将其放在.config文件中:
find . -name pandas ./opt/python/run/venv/lib64/python3.6/site-packages/pandas
2.1。进入控制台的系统路径是什么
eb ssh
which python3
/usr/bin/python3
2.2。找到您的python路径
find . -name python
./opt/python/run/baselinenv/bin/python
./opt/python/run/venv/bin/python
find . -name apps.py
/opt/python/current/app/apps.py
.ebextensions上的
files: "/etc/cron.d/mycron": mode: "000644" owner: root group: root content: | 15 6 * * * root echo $(date) >> /tmp/cron.log; /usr/local/bin/myscript.sh >> /tmp/cron_py.log 2>&1;
"/usr/local/bin/myscript.sh":
mode: "000755"
owner: root
group: root
content: |
#!/bin/bash
date > /tmp/date
# Your actual script content
/opt/python/run/venv/bin/python3 /opt/python/current/app/apps.py
exit 0
commands: remove_old_cron: command: "rm -f /etc/cron.d/mycron.bak"
现在一切都正常了。
https://stackoverflow.com/questions/52508256
复制相似问题