Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Configurer Django avec Amazon S3 via django-storages

+2 votes

J'ai suivi ce tuto pour faire ça, le problème c'est qu'avec Python 3.3, ça merde...

Donc à la place, j'ai trouvé et installé un fork compatible Python 3 de django-storages ici ainsi que boto3 qui remplace boto.

Si vous avez la flemme de lire le tuto, le but pour moi est que quand je fasse un collectstatic, mes fichiers statiques en local soient automatiquement uploadés vers s3.

Mon settings.py:

AWS_STORAGE_BUCKET_NAME = os.environ['LIVIN_AWS_STORAGE_BUCKET_NAME']
AWS_S3_REGION_NAME = os.environ['LIVIN_AWS_S3_REGION_NAME']
AWS_ACCESS_KEY_ID = os.environ['LIVIN_AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['LIVIN_AWS_SECRET_ACCESS_KEY']

AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
STATIC_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN

# Tell the staticfiles app to use S3Boto storage when writing the collected
# static files (when you run `collectstatic`).
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

Quand je run python manage.py collectstatic :

ImportError: No module named 'boto'
During handling of the above exception, another exception occurred:
...
django.core.exceptions.ImproperlyConfigured: Could not load Boto's S3 bindings.
See https://github.com/boto/boto
demandé 16-Jul-2015 par walt (230 points)

Apparament, le module installé par le paquet s'appelle boto3, sauf que django-storages cherche a importer le module boto (cf django-storages/storages/backends/s3boto.py#14)

boto3 c'est juste la troisieme version de boto, et n'a rien avoir avec python3. AS3 est tjrs accessible en utilisant boto et python2 ou python3. C'est vrai que ça fait pas mal de 3 inutiles.

Merci à tous les 2 ça m'a bien aidé. Donc en fait pour que ça fonctionne out of the box avec Python 3, il faut bien django-storages-redux (le fork Python 3), mais boto "classique". Confusion avec tous ces '3' ... :)

@walt, mets ton commentaire comme réponse et passe la comme acceptée stp, ça mettra la solution en évidence.

1 Réponse

+2 votes
 
Meilleure réponse

Comme mentionné par jc et Nsukami_,

boto3 c'est juste la troisieme version de boto, et n'a rien avoir avec python3.
Donc avec Django qui tourne sur Python3+, Il faut donc installer django-storages-redux (le fork python 3 et maintenu de django-storages), mais le package boto classique (et non pas boto3).

répondu 16-Jul-2015 par walt (230 points)
...