2012-02-24 8 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

Hm。 storages.pyの 'storages.backends.s3boto import S3BotoStorage'行からコメントして、代わりに' import storages'と 'print storages .__ file__'の行に書きます。次に、 'core.storages.S3StaticBucket'をシェルにインポートします。次に、シェル内で 'storages'を手動でインポートし、' storages .__ file__'を出力します。パスが異なる場合は、あなたの答えがあります。 –

答えて

7

名前空間の競合があります。 storage絶対名はstorageローカル名と衝突します。これは、直感的かもしれないが、あなたは、それ自体がモジュールからインポートすることができます:今、私たちはmy_module含むディレクトリにPythonのシェルを実行

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

:要するに

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

関連する問題