编程语言
首页 > 编程语言> > 如何运行Python脚本,该脚本是在AWS SSH会话中上传的应用程序的一部分?

如何运行Python脚本,该脚本是在AWS SSH会话中上传的应用程序的一部分?

作者:互联网

我正在尝试运行从开发机上作为我的AWS Elastic Beanstalk应用程序的一部分上传的Python脚本,但不知道如何操作.我相信我有located the script correctly,但是当我尝试在SSH下运行它时,出现导入错误.

例如,我有一个Flask-Migrate迁移脚本作为应用程序的一部分(与example in the documentation几乎相同),但是在使用SSH成功​​连接到我的EB实例后

> eb ssh

locating the script

$sudo find / -name migrate.py

当我在其中找到它的目录(/ opt / python / current)中运行时

$python migrate.py db upgrade

在SSH提示符下,我得到

Traceback (most recent call last):
  File "db_migrate.py", line 15, in <module>
    from flask.ext.script import Manager
ImportError: No module named flask.ext.script

即使我的requirements.txt(以及我的其他文件在同一目录中)也带有flask-script == 2.0.5.

在Heroku上,我可以分两步完成所有这些操作

> heroku run bash
$python migrate.py db upgrade

AWS上是否有等效功能?如何运行Python脚本,该脚本是在AWS SSH会话中上传的应用程序的一部分?也许我错过了设置代码运行环境的步骤?

解决方法:

要迁移数据库,最好的方法是使用container_commands,它们是每次部署应用程序时都会运行的命令. EBS documentation(步骤6)中有一个很好的例子:

container_commands:
  01_syncdb:    
    command: "django-admin.py syncdb --noinput"
    leader_only: true

出现ImportError的原因是因为EBS将软件包安装在virtualenv中.在使用SSH在应用程序中运行任意脚本之前,请先使用以下命令转到包含(最新)代码的目录

cd /opt/python/current

然后激活virtualenv

source /opt/python/run/venv/bin/activate

并设置环境变量(您的脚本可能期望的)

source /opt/python/current/env

标签:amazon-web-services,ssh,elastic-beanstalk,python
来源: https://codeday.me/bug/20191028/1954898.html