1

Python 2.7、Boto 2.6、およびpy2exeを使用して、AmazonのDynamodbと対話するWindows実行可能ファイルを作成しています。アプリケーションはpy2exeを使用してコンパイルされますが、AWSとやり取りするたびに無期限にハングします。

これがpy2exeのsetup.pyです

from distutils.core import setup
import py2exe
import sys

setup(windows=[{"script" : "smart_gui.py"}],
 options={"py2exe" : {
 "includes" : ["sip", "PyQt4", "simplejson", "email","lxml","http", "urllib",
 "email"], 
 "packages":["gzip", "email"],
 "excludes":["Carbon","_scproxy", "Carbon.Files"]}})

そして、この行により、プログラムは無期限に渡されます。

table = self.dynamo.get_table(self.conf['users_table'])

これがpy2exeの関連する出力です

The following modules appear to be missing
['Crypto.PublicKey._fastmath', 'builtins', 'cchardet', 'certifi', 'email.Charset',
'email.Encoders', 'email.Errors', 'email.Generator', 'email.Header',
'email.Iterators', 'email.MIMEAudio', 'email.MIMEBase', 'email.MIMEImage',
'email.MIMEMessage', 'email.MIMEMultipart', 'email.MIMEText', 'email.Message', 
'email.Parser', 'email.Utils', 'email.base64MIME', 'email.quopriMIME', 'http.client',
'http.cookiejar', 'http.cookies', 'kerberos', 'oauthlib.common', 'oauthlib.oauth1', 
'oauthlib.oauth1.rfc5849', 'packages.ssl_match_hostname.CertificateError', 
'packages.ssl_match_hostname.match_hostname', 'queue', 'simplejson._speedups', 
'test.test_support', 'urllib.parse', 'urllib.request']

Make sure you have the license if you distribute any of them, and
make sure you don't distribute files belonging to the operating system.

OLEAUT32.dll - C:\Windows\system32\OLEAUT32.dll
USER32.dll - C:\Windows\system32\USER32.dll
MSVCP90.dll - C:\Users\karl\Desktop\Smart_Select\MSVCP90.dll
SHELL32.dll - C:\Windows\system32\SHELL32.dll
KERNEL32.dll - C:\Windows\system32\KERNEL32.dll
WINMM.dll - C:\Windows\system32\WINMM.dll
COMDLG32.dll - C:\Windows\system32\COMDLG32.dll
ADVAPI32.dll - C:\Windows\system32\ADVAPI32.dll
NETAPI32.dll - C:\Windows\system32\NETAPI32.dll
WS2_32.dll - C:\Windows\system32\WS2_32.dll
WINSPOOL.DRV - C:\Windows\system32\WINSPOOL.DRV
GDI32.dll - C:\Windows\system32\GDI32.dll
IMM32.dll - C:\Windows\system32\IMM32.dll
VERSION.dll - C:\Windows\system32\VERSION.dll
ole32.dll - C:\Windows\system32\ole32.dll
ntdll.dll - C:\Windows\system32\ntdll.dll

Botoをpy2exeで動作させるにはどうすればよいですか?

4

1 に答える 1

1

私はこれにほとんど 1 日を費やしました - py2app はすべての依存関係を site-packages.zip にラップし、boto はその cacerts.txt を zip アーカイブから直接読み取ろうとします (ディレクトリのように扱いますが、これは機能しません)。 .

py2app のランタイム解凍マジックが (もしあれば) 何をするのかはわかりませんが、私が持っていた最も簡単な解決策は、cacerts.txt の独自のコピーを作成し、py2app setup.py にデータファイルとして含めることでした。

DATA_FILES = [                                                                                                                              
#Add the cert                                                                                                                           
('backup_cacert', ['cacerts.txt'])                                                                                                      
]            

次に、メイン関数で次のようにします。

import boto.connection                                                                                                                      
try:                                                                                                                                        
    open(boto.connection.DEFAULT_CA_CERTS_FILE)                                                                                             
except IOError as e:                                                                                                                                                                                                                                                                                                              
    boto.connection.DEFAULT_CA_CERTS_FILE = os.path.join(os.path.dirname(__file__), 'backup_cacert', 'cacerts.txt')                                                                                                    
try:                                                                                                                                        
    open(boto.connection.DEFAULT_CA_CERTS_FILE)                                                                                             
except IOError as e:                                                                                                                        
    raise e       
于 2013-05-08T23:59:09.780 に答える