通过外壳脚本运行python代码时无法读取环境变量

问题描述

我在EC2实例中托管了一个python脚本(使用CI,CodeDeploy,CodePipeline)。在代码中,我将数据库的路径作为env变量,如下所示:

def db_connection():
    DB_ADAPTER = os.environ.get('DB_ADAPTER')
    DB_USER = os.environ.get('DB_USER')
    DB_PASSWORD = os.environ.get('DB_PASSWORD')
    DB_HOST = os.environ.get('DB_HOST')
    DB_NAME = os.environ.get('DB_NAME')
    engine_url = DB_ADAPTER + '://' + DB_USER + ':' + \
        DB_PASSWORD + '@' + DB_HOST + '/' + DB_NAME
    eng = db.create_engine(engine_url)
    conn = eng.connect()
    print('Connected to the DB')
    return eng,conn

我启动了实例,运行了它,并完成了nano .profile。在.profile中,我手动添加了以下几行:

export DB_ADAPTER=postgresql+psycopg2
export DB_USER=dummy_user
export DB_PASSWORD=dummy_pwd
export DB_HOST=ec2-xx-xxx-xxx-xxx.eu-central-1.compute.amazonaws.com
export DB_NAME=dummy_db

当我将代码推送到GitLab存储库时,CI运行并且代码以压缩文件的形式转储到S3存储桶中,然后启动CodeDeploy和CodePipeline。

在此阶段,我收到以下错误

enter image description here

Error2

start_script.sh是:

#!/usr/bin/env bash
cd /home/ubuntu/anomaly-detection/
python3.7 ad_fbprophet.py
exit

appspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu/anomaly-detection
permissions:
- object: /
  pattern: "*"
  owner: root
  group: root
hooks:
  BeforeInstall:
    - location: /scripts/before_install.sh
      timeout: 300
      runas: root
  ApplicationStart:
    - location: /scripts/start_script.sh
      runas: ubuntu

但是,当我从笔记本电脑登录EC2实例并运行python脚本时,它可以完美运行而没有任何错误并提供输出

E3

感谢您的帮助。

解决方法

我在这里可能是错的,但是据我所知,通过编辑.profile文件,您仅在实际登录并使用您为其编辑过.profile的用户运行外壳程序时,指定要导出的环境变量。 。看来您是以“根”身份开始工作的,其.profile看上去可能完全不同。我想您必须在启动时“获取”您感兴趣的特定配置文件,才能看到env变量。

$ source /home/your_user/.profile

或者,尝试将env变量添加到/ etc / profile而不是家庭配置文件中。

,

您必须安装python-dotenv

您可以使用以下命令执行此操作:

pip install python-dotenv

然后必须在代码中添加:

from dotenv import load_dotenv

load_dotenv()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...