2012-02-24 2 views
9

오류 가져 storages.backends이 파일이 storages.py이라고하며 응용 프로그램에 배치됩니다 core 전화 : settings.py에서장고 - 나는 정의 스토리지 백엔드를 만든

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) 

을, 나는 follwing을했다 :

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

어떤 생각?

+0

당신이를 가져올 수 있습니까'핵심 .storages.S3StaticBucket'도 쉘에 있습니까? 어쩌면 거기에'__init __. py' 파일을 놓친 것일 수도 있습니다. –

+0

방금 ​​시도한 결과,'ImportError : No modules named backends.s3boto'가 있습니다. 나는 앱'core'에 빈'__init __. py'를 가지고 있습니다. – abstractpaper

+0

흠. storages.py의'storages.backends.s3boto import S3BotoStorage' 라인에서'storages.backends.s3bot' 라인을 주석 처리하고'import storages'를 쓰고'print storages .__ file__' 라인에 다음과 같이 쓰십시오. 그런 다음'core.storages.S3StaticBucket'을 쉘에 임포트하십시오. 그런 다음 쉘에서'storages'를 수동으로 가져 와서'storages .__ file__'을 출력하십시오. 경로가 다른 경우 - 귀하의 대답이 있습니다. –

답변

7

네임 스페이스 충돌이 있습니다. storage 절대 이름이 storage 로컬 이름과 충돌합니다. 그것은 직관적있을 수 있습니다,하지만 당신은 그 자체로 모듈에서 가져올 수 있습니다

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

지금 우리는 my_module 포함하는 디렉토리에 파이썬 쉘을 실행 한마디로

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

를, 당신의 모듈은 백엔드를 가져올 시도 그 자체에서.

절대 가져 오기 - Trying to import module with the same name as a built-in module causes an import error이 필요합니다.

+2

감사합니다.'__future__ import absolute_import'에서 추가되었습니다. 이제 작동합니다. – abstractpaper

4

동일한 문제가 있었지만 django-storages이 설치되어 있음에도 불구하고 boto이 아니 었습니다. 간단한 pip install boto은 내 시나리오에서 오류를 수정했습니다.

4

나는 다른 사람들을 도울 수있는 다른 유형의 문제가 있었는데 storages.py이라는 다른 파일을 사용했지만 그 파일을 며칠 전에 삭제했지만 여전히 예외가 발생했습니다 ... 파일을 삭제하지 않은 것입니다 storages.pyc!

+1

네, 이런 일이 저에게도 일어났습니다. – ilovett

0

오타가 잘못되었습니다. 변경 :

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

TO :

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3Boto3Storage'

관련 문제