【问题标题】:Django Storages - Could Not Load Amazon's S3 Bindings ErrorsDjango 存储 - 无法加载 Amazon 的 S3 绑定错误
【发布时间】:2012-11-02 16:17:48
【问题描述】:

嘿,所以尝试将我的用户上传的图像连接到我的 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.

如何正确设置?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 忘记安装 Boto。现在安装了 Boto,我打开 shell 进行检查(与上面相同的过程),它返回 而不是 S3Boto。我可以在这里做什么?
    • 我已经安装了 boto,但使用 'storages.backends.s3.S3Storage' 对我不起作用
    • @NicolasBouliane 尝试使用 storages.backends.s3boto.S3BotoStorage
    • 问题不在于 boto,django-storages 缺乏适当的 python3 支持,并且还在 django 中使用了已弃用的内部 util 函数。
    • 现在更有可能是pip install boto3
    【解决方案2】:

    考虑使用 boto3 而不是旧的 bo​​to:

    requirements.txt:

    pip install django-storages
    pip install boto3
    

    settings.py:

    DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
    

    【讨论】:

      【解决方案3】:

      最近在 TravisCI 上使用 Django 存储库

      遇到过这个问题

      运行 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

      【讨论】:

      • 这个解决了我在谷歌云引擎虚拟机上安装 edX 平台时的问题。我不知道为什么会这样:D
      • 另一种方式来定义 boto config 的默认路径以指向不存在的文件。我不记得为什么了,但是在 boto github 上有一个线程,我需要在这里查找 lknk
      【解决方案4】:

      错误消息中的链接http://developer.amazonwebservices.com/connect/entry.jspa?externalID=134 现在似乎可以使用(2014 年 6 月)。如果您关注并下载,解压缩 .zip 文件并将 S3.py 放在您的 Python 路径中(即在 site-packages 中),一切正常。

      【讨论】:

        【解决方案5】:

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

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

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

        但是如果您使用 setup.py 或 pip 或 easy_install 安装了 django-storages,那么有以下 2 个选项: p>

        A. 基于 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

        【讨论】:

          【解决方案6】:

          在回答您上面的评论时,听起来您使用了错误的设置,请检查一下:

          DEFAULT_FILE_STORAGE = 'storages.backends.s3.S3Storage'
          

          【讨论】:

            猜你喜欢
            • 2012-05-21
            • 2019-01-03
            • 2019-03-20
            • 1970-01-01
            • 1970-01-01
            • 2023-04-10
            • 2021-11-14
            • 1970-01-01
            • 2016-02-12
            相关资源
            最近更新 更多