EC2 Amazon Beanstalk 上的 django-admin.py 和 python 路径

Posted

技术标签:

【中文标题】EC2 Amazon Beanstalk 上的 django-admin.py 和 python 路径【英文标题】:django-admin.py and python path on EC2 Amazon Beanstalk 【发布时间】:2014-03-12 22:13:55 【问题描述】:

我在 Elastic Benastalk 上部署了我的 django 应用程序,但是我的命令失败了,我认为问题是 django-admin.py 不在 $PYTHONPATH 中,我想将我的应用程序添加到 python 路径,但我不知道 EC2 实例上的确切路径是什么。 实际上我在以下位置找到了它:/opt/python/bundle/3/app(我通过 SSH 使用“查找”命令)……但那是固定且可靠的路径吗? ps:WTF是“3”吗?? (肯定不是我部署的版本或数量^_^)

更新:

如果我 cd 到 /opt/python/bundle/3/app/myappname 并运行:

python manage.py shell

我明白了:

  File "manage.py", line 3, in <module>
    from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

已解决!

Amazon Beanstalk 使用 virtualenv(就像我自己在本地做的那样),为了激活它,您必须:

source /opt/python/run/venv/bin/activate
cd /opt/python/current/app
python manage.py commandname

但是,为了使用自定义管理命令(这就是我需要访问我的 EC2 实例上的 django shell 的原因),您必须将您的应用程序添加到 python 路径以及您的应用程序使用的所有环境变量,所以我做了:

vi /home/ec2-user/.bash_profile

并添加:

export PYTHONPATH=$PYTHONPATH:/opt/python/current/app

还有我的环境变量……现在可以了! :)

为了自动激活virtualenv并能够在通过ssh登录后立即使用django shell,是否可以添加:

source /opt/python/run/venv/bin/activate
cd /opt/python/current/app

在 .bash_profile 中:)

【问题讨论】:

【参考方案1】:

如果您需要更改 PYTHONPATH,或者一般设置任何环境变量,您可以添加 option_name

在您的 .ebextensions/myapp-env.config 文件中(或任何您的 *.config 名称):

option_settings:
  - option_name: PYTHONPATH
    value: /opt/python/ondeck/app/myapp:$PYTHONPATH

【讨论】:

【参考方案2】:

消息:

  File "manage.py", line 3, in <module>
    from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

不是因为您的应用程序不在 PYTHONPATH 中,而是因为它根本找不到您的 django 应用程序。这意味着您的站点包目录不在 PYTHONPATH 中。

尝试在您的服务器中找到站点包目录,该目录应该在 PYTHONPATH 中。我还没有使用 Elastic Beanstalk 部署 python 应用程序,但我相信它可能使用python virtual environment。在这种情况下,您需要在运行python ./manage shell之前获取您的虚拟环境@

【讨论】:

这将对我确定的人有所帮助。使用此命令查找站点包所在的位置:python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

以上是关于EC2 Amazon Beanstalk 上的 django-admin.py 和 python 路径的主要内容,如果未能解决你的问题,请参考以下文章

Amazon EC2 和 AWS Elastic Beanstalk 之间的区别

Amazon EC2 Beanstalk Laravel 显示代码而不是显示页面

在 Amazon Elastic Beanstalk(Apache、EC2)上安装 Mod_security

如何在不阻止我的网络服务器的情况下上传大文件?使用 python 和 Amazon Beanstalk/EC2

Amazon RDS 和 Elastic Beanstalk 连接

Amazon Elastic Beanstalk 腻子