Django存储 - 无法加载亚马逊的S3绑定错误

时间:2012-11-14 06:50:17

标签: python django amazon-s3 amazon-web-services django-storage

嘿所以试图将用户上传的图像连接到我的S3存储桶,以便图像存储在那里。使用django存储(进行了一些研究,似乎是每个人都建议的,但对想法持开放态度)

这就是我的所作所为:

安装了django存储

pip install django-storages

将其添加到我的INSTALLED_APPS

#settings.py
INSTALLED_APPS = (
...
'storages',
)

并将此代码添加到settings.py

#settings.py
DEFAULT_FILE_STORAGE = 'storages.backends.s3.S3Storage'
AWS_ACCESS_KEY_ID = '#################'
AWS_SECRET_ACCESS_KEY = '#######################'
AWS_STORAGE_BUCKET_NAME = 'mybucketname'

然后我打开shell并运行它来检查

from django.core.files.storage import default_storage
print default_storage.connection
...
ImproperlyConfigured: Could not load amazon's S3 bindings.
See http://developer.amazonwebservices.com/connect/entry.jspa?externalID=134

该链接导致404错误。一直关注documentation并尝试了所有3种设置DEFAULT_FILE_STORAGE的方法,但没有一种方法可以正常工作。见下文。

DEFAULT_FILE_STORAGE = 'libs.storages.backends.S3Storage.S3Storage'
ImproperlyConfigured: Error importing storage module libs.storages.backends.S3Storage

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
ImproperlyConfigured: Could not load Boto's S3 bindings.

如何正确设置?

6 个答案:

答案 0 :(得分:27)

你安装了python-boto吗? pip install boto 要么 pip install boto3

答案 1 :(得分:4)

最近这个问题出现在 TravisCI 上,带有 Django repo

正在运行python manage.py compress失败并显示错误:

  

无法加载Boto的S3绑定。

boto尝试导入未安装的google-compute-engine模块时遇到了问题。

解决问题的一种方法是使用

安装GCE引擎

pip install google-compute-engine

修改

经过调查,似乎这个特殊问题是由于Travis在GCE上,而GCE有一个默认的/etc/boto.cfg文件,它提示boto寻找GCE引擎。

在不安装更多依赖项的情况下在Travis上解决此问题的另一种方法是通过设置变量

来设置默认配置BOTO_CONFIG以指向无处

BOTO_CONFIG=/tmp

travis.yml

请参阅此问题 https://github.com/boto/boto/issues/3741

答案 2 :(得分:2)

考虑使用boto3代替较早的boto:

requirements.txt:

pip install django-storages
pip install boto3

settings.py:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

答案 3 :(得分:1)

在回答上述评论时,听起来您使用了错误的设置,请查看以下内容:

DEFAULT_FILE_STORAGE = 'storages.backends.s3.S3Storage'

答案 4 :(得分:0)

对于您正在尝试的第一个设置,即:

DEFAULT_FILE_STORAGE = 'libs.storages.backends.S3Storage.S3Storage'

这意味着如果存储代码存在于python路径的' libs.storages' 目录中,那么应该像上面那样访问它。

如果您使用setup.py或pip或easy_install 安装了django-storage,则会出现 2个选项

一个。 基于Amazone S3Python的库

DEFAULT_FILE_STORAGE = 'storages.backends.s3.S3Storage'
  • python和S3之间的简单接口

B中。 基于Python Boto的库

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
  • 基于 python boto ,并支持许多高级功能,例如连接池等。

  • 但您需要安装python boto 才能使用它,例如pip install boto

答案 5 :(得分:0)

错误消息http://developer.amazonwebservices.com/connect/entry.jspa?externalID=134中的链接现在似乎有效(2014年6月)。如果您按照它下载并下载,请解压缩.zip文件并将S3.py放在Python路径上(即site-packages),这一切都有效。