J'essaie de compiler un simple programme Python, qui télécharge des fichiers dans un compartiment S3 en utilisant le paquet boto, dans un seul fichier redistribuable .exe. Je suis ouvert à toute méthode de compilation. Jusqu'à présent, j'ai essayé à la fois bbfreeze
et py2exe
et les deux donnent les mêmes résultats. Le code en question qui cause des problèmes ressemble à ceci:Comment compiler du code python qui utilise boto pour accéder à S3?
import boto
#...snip...
fname_base = os.path.basename(fname)
s3 = boto.connect_s3(aws_access_key_id=_aws_key, aws_secret_access_key=_aws_secret_key, is_secure=False);
bucket = s3.get_bucket(_bucket)
key = bucket.new_key(fname_base)
key.set_contents_from_filename(fname)
compilée avec l'utilitaire de bottelage exécutable et exécutez-je obtenir:
Traceback (most recent call last):
File "s3stash.py", line 238, in <module>
sys.exit(main())
File "s3stash.py", line 225, in main
push_file_to_s3(f, options)
File "s3stash.py", line 160, in push_file_to_s3
_push_with_boto(fname)
File "s3stash.py", line 148, in _push_with_boto
s3 = boto.connect_s3(aws_access_key_id=_aws_key, aws_secret_access_key=_aws_secret_key, is_secure=False);
File "boto\__init__.pyo", line 104, in connect_s3
File "zipextimporter.pyo", line 82, in load_module
File "boto\s3\connection.pyo", line 27, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "boto\utils.pyo", line 55, in <module>
File "email\__init__.pyo", line 79, in __getattr__
ImportError: No module named multipart
J'utilise ActiveState Python 2.6 sous Windows XP SP3. Le paquet Boto a été installé avec:
easy_installer --always-unzip boto
J'ai utilisé l'option --always-unzip
à partir des informations sur les found herepy2exe
ayant des problèmes avec les fichiers d'œufs qui ont été déballés. Malheureusement, l'erreur que je reçois est la même lorsque j'utilise bb-freeze
pour générer l'exécutable.
La sortie de py2exe
comprend, à la fin, le bit d'information suivant:
The following modules appear to be missing
['_scproxy', 'email.Encoders', 'email.MIMEBase', 'email.MIMEMultipart', 'email.MIMEText', 'email.Utils', 'simplejson']
Ce qui donne quelques conseils. J'ai essayé des méthodes suggérées dans d'autres messages à SO où l'option -i
a été recommandée lors de la compilation avec py2exe
et malheureusement rien n'a aidé. Dans ces autres questions, les utilisateurs faisaient leur propre inclusion explicite des sous-modules de courrier électronique. Je ne pouvais pas comprendre comment adapter ces solutions à mon cas malheureusement et juste en les ajoutant avec -i
n'a pas arrêté py2exe
de me prévenir des modules manquants, ou l'exe groupé résultant d'échouer avec l'erreur de module manquant. Est-ce que quelqu'un peut m'aider à obtenir ce code pour la redistribution?
Salut, merci pour cela. Je vais l'essayer! –