python - 如何运行作为我在 AWS SSH session 中上传的应用程序的一部分的 Python 脚本?

标签 python amazon-web-services ssh amazon-elastic-beanstalk

我正在尝试运行一个 Python 脚本,我已从我的开发机器上将其作为我的 AWS Elastic Beanstalk 应用程序的一部分上传,但不知道如何运行。我相信我有 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 上是否有等效的功能?如何运行作为我在 AWS SSH session 中上传的应用程序的一部分的 Python 脚本?也许我缺少设置代码运行环境的步骤?

最佳答案

要迁移数据库,最好的方法是使用 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

关于python - 如何运行作为我在 AWS SSH session 中上传的应用程序的一部分的 Python 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27985153/

相关文章:

amazon-web-services - SQS 收到消息后自动删除 Lambda

java - 关于 com.jcraft.jsch.JSchException : UnknownHostKey: x. y.com 的查询。 DSA key 指纹为 "ac:ew:...."

bash - shell 终端 session 中环境之间的共同点是什么?

linux - 通过 jenkins 构建步骤传递密码

ajax - 一个人可以使用 ELB 应用程序负载均衡器(位于 Solr 前面)添加 CORS header 吗?

linux - 通过伪 tty 终端的 SSH 和 sudo

python - 网格未按预期工作 python Tkinter

python - 基于分类列创建填充随机元素的新列

Python获取字符串中所有子串出现的索引范围

Python:TCP 中断路由的检测速度非常慢