我已经开发了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脚本不可用吗?
答案 0 :(得分:0)
Cron作业在您的环境之外运行,因此意味着它们没有您的$PATH
和其他环境变量(this答案中的更广泛的描述),从而使它们无法找到某些程序。您应该做的是将您的Python脚本执行包装在bash脚本中,在该脚本中,您一开始会导出所有需要的环境变量(或通常使其使用您的环境)。然后,使用您的cron执行此bash脚本。
答案 1 :(得分:0)
@arudzinska是正确的。我的案例是使用Elastic Beanstalk AWS和cronjob对pandas有相同的问题(没有名为“ pandas”的模块)。
我使用了上面的注释,并尝试找到pandas软件包在哪里,然后找到安装requirements.txt软件包的python路径,并将它们全部放到.config文件中:
1.熊猫路径:
uri = encodeURI(`info/${props.movie.Title}`)
console.log(uri);
<Link to={uri}> info </Link>
2.1。控制台的系统路径是什么
find . -name pandas
./opt/python/run/venv/lib64/python3.6/site-packages/pandas
/ usr / bin / python3
2.2。找到你的python路径
eb ssh
which python3
./ opt / python / run / baselinenv / bin / python
./opt/python/run/venv/bin/python
应用文件
find . -name python
/opt/python/current/app/apps.py
find . -name apps.py
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
现在一切正常。