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