1

我正在使用 Python 2.7、Boto 2.6 和 py2exe 创建与亚马逊的 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

我花了一天的大部分时间在这上面 - py2app 将所有依赖项包装到一个 site-packages.zip 中,boto 尝试直接从 zip 存档中读取它的 cacerts.txt(将其视为一个目录,这是行不通的) .

我不清楚什么(如果有的话)运行时解压魔法 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 回答