boto パッケージを使用してファイルを S3 バケットにアップロードし、単一の再配布可能な .exe ファイルにする単純な Python プログラムをコンパイルしようとしています。私はどんなコンパイル方法にもオープンです。bbfreeze
これまでのところ、両方を試してみましたがpy2exe
、両方とも同じ結果が得られます。問題のコードは次のようになります。
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)
実行可能バンドルユーティリティでコンパイルして実行すると、次のようになります。
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
Windows XP SP3 で ActiveState Python 2.6 を使用しています。boto パッケージは次のようにインストールされました。
easy_installer --always-unzip boto
解凍された卵ファイルに問題があることについて、ここに--always-unzip
ある情報に基づいてオプションを使用しました。残念ながら、実行可能ファイルのビルドに使用した場合と同じエラーが発生します。py2exe
bb-freeze
からの出力にpy2exe
は、最後の近くに次の情報が含まれています。
The following modules appear to be missing
['_scproxy', 'email.Encoders', 'email.MIMEBase', 'email.MIMEMultipart', 'email.MIMEText', 'email.Utils', 'simplejson']
これはいくつかのヒントを提供します。SOへの他の投稿で提案されている方法を試しました-i
が、コンパイル時にオプションが推奨されていましたがpy2exe
、残念ながら何も役に立ちませんでした。これらの他の質問では、ユーザーは電子メールのサブモジュールを独自に明示的に含めていました。残念ながら、これらのソリューションを自分のケースに適応させる方法を理解できませんでした。それらを追加するだけでは、モジュールが見つから-i
ないことpy2exe
を警告したり、バンドルされたexeがモジュールが見つからないというエラーで失敗したりすることはありませんでした。
このコードを再配布用にバンドルするのを手伝ってくれる人はいますか?