python软件包不适用于从cron执行的脚本

时间:2018-09-26 00:19:42

标签: python amazon-ec2 cron amazon-elastic-beanstalk

我已经开发了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脚本不可用吗?

2 个答案:

答案 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>

  1. Python路径

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

  1. 应用文件

    find . -name python

/opt/python/current/app/apps.py

  1. 在.ebextensions处修改了cronjob.config文件

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

现在一切正常。