Python - Py2exe无法通过'email'模块构建.exe
py2exe与标准的电子邮件模块不兼容
你好。我正在尝试使用py2exe把一个脚本转换成exe文件。构建过程中出现了以下信息:
以下模块似乎缺失
['email.Encoders', 'email.Generator', 'email.Iterators', 'email.MIMEBase', 'email.MIMEMultipart', 'email.MIMEText', 'email.Utils', 'email.base64MIME']
生成的可执行文件无法正常工作。提到的模块没有被包含在内。我在网上查了一下,发现py2exe在处理标准库中的电子邮件模块时有个问题,具体是因为使用了懒加载(Lazy import)。不幸的是,我还没有找到解决这个问题的方法。有没有人能帮帮我?
谢谢,
附言:脚本中的导入看起来是这样的:
代码:选择全部 import string,time,sys,os,smtplib from email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText from email import Encoders
8 个回答
你在用哪个版本的Python呢?如果你用的是2.5或2.6版本,那么你应该像下面这样来导入模块:
import string,time,sys,os,smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import Encoders
我很确定,如果你正确使用py2exe的modulefinder,它可以找到email这个包(也就是说,在Python 2.5及以上版本中用上面的名字,或者在Python 2.4及以下版本中用旧的名字)。当然,SpamBayes的设置脚本不需要特别去包含email包,它可以顺利地包含email模块。
其他的回答也说得对,如果你确实需要特别包含某个模块,可以使用“includes”选项,这可以通过命令行来实现,或者在调用设置时传递进去。
看看这个问题 如何用py2exe打包twisted程序,看起来是同样的问题。
那里的回答是要在命令行中明确地把模块包含进py2exe。
如果你不需要使用py2exe的话,bbfreeze会更好用。我试过用它来处理邮件模块。你可以在这里找到它的链接:http://pypi.python.org/pypi/bbfreeze/0.95.4