2 votes

Utilisation de boto en python 3

J'ai la branche neo de boto 2.3.0 et python 3.3. J'ai utilisé boto pour collecter des données à partir de simpledb et cela a fonctionné correctement. Cependant, lorsque j'essaie de connecter boto à s3, j'obtiens des erreurs. Je ne sais pas si j'ai besoin d'aide, mais j'ai besoin de savoir comment faire. Je ne veux vraiment pas downgrader mon python car tout mon projet est en python 3.3.

Voici la liste des commandes que j'ai écrites :

       >>> from boto.s3.key import Key
       >>> k = Key(bucket)
       >>> k.key='testfile'
       >>> k.set_contents_from_string('Hello this is my Boto S3 Test')

Voici la liste des erreurs que j'obtiens lors de l'exécution de la dernière commande :

       Traceback (most recent call last):
       File "<pyshell#8>", line 1, in <module>
       k.set_contents_from_string('Hello this is my Boto S3 Test')
       File "C:\Python33\lib\site-packages\boto\s3\key.py", line 1060, in              
       set_contents_from_string
       fp = compat.StringIO(s)
       TypeError: initial_value must be str or None, not bytes

Les autres problèmes que j'ai rencontrés (Root est le même, je suppose) sont indiqués sur ce lien :

iter() renvoie un non-itérateur de type 'Key' : boto amazon s3

1voto

Zulu Points 1471

En fait, boto peut fonctionner avec Python 3.

Ensemble :

0voto

DR1979 Points 1

Oui, réponse courte... vous devrez refactoriser, ce qui n'est pas nécessairement une mauvaise chose parce que cela devrait être porté à 3. Essayez d'exécuter 2to3 sur les sources et de construire avec Python3... Traitez tous les problèmes qui apparaissent dans le processus de construction... il y aura moins à traiter que la réponse ci-dessus si vous utilisez beaucoup de fonctionnalités de boto dans votre projet.

0voto

meawoppl Points 443

Ce problème ressemble à un problème StringIO vs BytesIO. Voir ici pour une piste :

https://docs.python.org/2/library/io.html

0voto

Nick Points 21

J'ai eu exactement le même problème, et j'ai écrit un petit paquet python pour le résoudre. Cela vous permettra de créer un virtualenv python2, et d'importer de manière transparente les paquets boto dans votre paquet python3.

Vous pouvez également procéder à une installation système de awscli (qui utilise python2, car il est basé sur boto) mais l'invoque ensuite via subprocess.check_call() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X