【问题标题】:Run manage.py from AWS EB Linux instance从 AWS EB Linux 实例运行 manage.py
【发布时间】:2013-11-28 15:00:57
【问题描述】:

如何从 AWS EB (Elastic Beanstalk) Linux 实例运行manage.py

如果我从 '/opt/python/current/app' 运行它,它会显示以下异常。

Traceback (most recent call last):
  File "./manage.py", line 8, in <module>
    from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

我认为它与 virtualenv 有关。有什么提示吗?

【问题讨论】:

  • 您没有可用于 python 解释器的 django。搜索文档以获取有关安装依赖项的位置的更多信息。你确定它们已经安装了吗?
  • 是的。它是安装了 Django 1.5.5 的 AWS EB Python 2.7 环境。事实上,Django Web 应用程序本身运行良好,我可以从浏览器中看到它。但是,我想通过 SSH 从 Linux shell 运行自定义命令。在这种情况下,我可以看到类似上面的错误。
  • 尝试找出 HTTP 服务器确实初始化了环境/设置路径。

标签: python django amazon-web-services


【解决方案1】:

如何从 AWS Elastic Beanstalk AMI 运行 manage.py。

  • SSH 登录 Linux (eb ssh)
    • (可选可能需要运行sudo su - 以获得适当的权限)
  • source /opt/python/run/venv/bin/activate
  • source /opt/python/current/env
  • cd /opt/python/current/app
  • python manage.py &lt;commands&gt;

或者,你可以像下面这样运行命令:

  • cd /opt/python/current/app
  • /opt/python/run/venv/bin/python manage.py &lt;command&gt;

【讨论】:

  • 更紧凑:/opt/python/run/venv/bin/python /opt/python/current/app/manage.py &lt;command&gt;
  • 它给出的权限被拒绝
  • @RoNiT,你可以使用“sudo su -”来获得root权限,然后你就拥有了权限。
  • 这不是最佳答案。 EB 的全部意义在于自动部署,而不必通过 SSH 连接到机器。
  • 很遗憾,这在新的 Python3.7 和 Amazon Linux 2 平台中不再有效。
【解决方案2】:

随着新版本的 Python 路径似乎发生了变化。

  • 应用位于 /var/app/current
  • 虚拟环境在/var/app/venv/[KEY]

所以说明是:

  1. 使用eb shh SSH 到机器
  2. 使用 ls /var/app/venv/ 检查环境的路径。下一步的唯一文件夹应该是[KEY]
  3. 使用source /var/app/venv/[KEY]/bin/activate 激活环境
  4. 执行命令python3 /var/app/current/manage.py &lt;command&gt;

当然亚马逊可以随时更改。

【讨论】:

  • 哇 - 为什么这么难找 - 非常感谢!
  • 你能澄清一下上面的[KEY]是什么吗?我不清楚……
  • @m.arthur 如上所述 KEY 是 /var/app/vent/ 中唯一文件夹的名称
  • 您可以将 [key] 替换为 *,这样就可以了
【解决方案3】:

TL;DR

此答案假定您已安装 EB CLI。请按以下步骤操作:

  1. 使用 ssh 连接到正在运行的实例。
eb ssh <environment-name>
  1. 进入环境后,加载环境变量(这对数据库配置很重要)
. /opt/python/current/env

如果您希望可以使用printenv 查看环境变量。

  1. 激活您的虚拟环境
source /opt/python/run/venv/bin/activate
  1. 导航到您的项目目录(这将取决于您的最新部署,因此请使用最新部署的编号而不是 XX
cd /opt/python/bundle/XX/app/
  1. 运行你想要的命令:
python manage.py <command_name>

运行示例

假设您的环境名称为my-env,您的最新部署号为13,并且您要运行shell 命令:

eb ssh my-env # 1
. /opt/python/current/env # 2
source /opt/python/run/venv/bin/activate # 3
cd /opt/python/bundle/13/app/ # 4
python manage.py shell # 5

【讨论】:

  • 嘿,在 ssh 之后,这似乎对我不起作用——“./opt/python/current/env”对我来说不存在。事实上,甚至 opt/python 都没有。请帮忙!
【解决方案4】:

截至 2022 年 2 月,解决方案如下:

$ eb ssh
$ sudo su -
$ export $(cat /opt/elasticbeanstalk/deployment/env | xargs)
$ source /var/app/venv/*/bin/activate
$ python3 /var/app/current/manage.py <command name>

如果您有数据库连接,则需要 $ export $(cat /opt/elasticbeanstalk/deployment/env | xargs) 来导入您的环境变量(很可能会)

【讨论】:

    猜你喜欢
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2015-03-11
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多