Django - Ошибка при импорте storages.backends - PullRequest
9 голосов
/ 24 февраля 2012

Я создал пользовательский бэкэнд хранилища, файл называется storages.py и помещается в приложение под названием core:

from django.conf import settings
from storages.backends.s3boto import S3BotoStorage

class S3StaticBucket(S3BotoStorage):
    def __init__(self, *args, **kwargs):
        kwargs['bucket_name'] = getattr(settings, 'static.mysite.com')
        super(S3BotoStorage, self).__init__(*args, **kwargs)

В settings.py у меня есть следующее:

STATICFILES_STORAGE = 'core.storages.S3StaticBucket'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

Когда я пытаюсь сделать python manage.py collectstatic, он показывает следующую ошибку:

django.core.exceptions.ImproperlyConfigured: Error importing storage module core.storages: "No module named backends.s3boto"

И когда я запускаю python manage.py shell и пытаюсь импортировать то же самое:

>>> 
>>> from django.conf import settings
>>> from storages.backends.s3boto import S3BotoStorage
>>> 

Есть идеи, что я делаю не так?

Ответы [ 4 ]

8 голосов
/ 25 февраля 2012

Конфликт пространства имен; абсолютное имя storage конфликтует с локальным именем storage. Это может быть не интуитивно понятно, но вы можете импортировать из модуля сам по себе:

// file my_module/clash.py
import clash
print clash.__file__

Теперь мы запускаем оболочку Python в директории, содержащей my_module:

$ python
>>> import my_module.clash
my_module.clash.py

Короче говоря, ваш модуль пытается импортировать бэкэнд из себя.

Вам необходим абсолютный импорт - Попытка импорта модуля с тем же именем, что и у встроенного модуля, приводит к ошибке импорта .

4 голосов
/ 21 июля 2013

У меня был другой тип проблемы, которая может помочь другим, у меня был другой файл с именем storages.py, но я удалил этот файл несколько дней назад и все еще получал исключение ... дело в том, что я не удалилфайл storages.pyc!

4 голосов
/ 25 июля 2012

У меня была такая же проблема, но для меня оказалось, что несмотря на установку django-storages, boto не было.Простой pip install boto исправил ошибку в моем сценарии.

0 голосов
/ 01 декабря 2017

Ошибка опечатки. Изменения:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

TO:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3Boto3Storage'

...