py2exe不适用于标准电子邮件模块

您好。我试图使用py2exe将脚本转换为exe。构建过程显示了这个:


以下模块似乎缺失

['email.Encoders','email.Generator','email.Iterators','email.MIMEBase','email.MIMEMultipart','email.MIMEText','email.Utils','email.base64MIME “]

可执行文件不起作用。引用的模块不包括在内。我在互联网上研究了这个,我发现py2exe在标准的lib电子邮件模块中使用的Lazy导入有问题。不幸的是,我没有成功找到解决此问题的方法。有人可以帮忙吗?

谢谢,

P.S。 脚本中的导入如下所示:

代码:全选     import string,time,sys,os,smtplib     来自email.MIMEMultipart导入MIMEMultipart     来自email.MIMEBase导入MIMEBase     来自email.MIMEText导入MIMEText     来自电子邮件导入编码器

有帮助吗?

解决方案

如果您不必使用py2exe,bbfreeze工作得更好,我已经尝试使用电子邮件模块。 http://pypi.python.org/pypi/bbfreeze/0.95.4

其他提示

看看这个问题 how-to-package-twisted-program -with-py2exe 似乎是同样的问题。

给出的答案是在命令行中明确地包含py2exe的模块。

您使用的是哪个版本的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可以正确地找到电子邮件包(如果你正确使用它)(即在Python 2.5+中使用上述名称,或者在Python 2.4中使用旧名称)。当然,SpamBayes安装脚本不需要明确包含电子邮件包,它包含电子邮件模块没有问题。

其他答案是正确的,如果你确实需要专门包含一个模块,你可以使用“includes”和“includes”。选项,可以通过命令行,也可以在调用setup时传入。

使用“包含”选项。请参阅: http://www.py2exe.org/index.cgi/ListOfOptions

我通过在setup.py中明确包含缺少的模块来实现它:

OLD setup.py:

setup(console = ['main.py'])

新的setup.py:

setup(console = ['main.py'], 
      options={"py2exe":{"includes":["email.mime.multipart","email.mime.text"]}})

这解决了我的问题: 在setup.py编辑

includes = ["email"]

请试试这个。这适用于我的py2exe构建。只需替换“project_name.py”即可。用你的主脚本。 EXTRA_INCLUDES是您需要在构建中包含的包,如电子邮件包。我也和你合作。

from distutils.core import setup
    import py2exe, sys, os

    sys.argv.append('py2exe')

    EXTRA_INCLUDES = [
        "email.iterators", "email.generator", "email.utils", "email.base64mime", "email", "email.mime",
        "email.mime.multipart", "email.mime.text", "email.mime.base",
        "lxml.etree", "lxml._elementpath", "gzip"
    ]

    setup(
        options = {'py2exe': {'bundle_files': 1, 'compressed': True, 'includes': EXTRA_INCLUDES,
                    'dll_excludes': ['w9xpopen.exe','MSVCR71.dll']}},
        console = [{'script': "project_name.py"}],
        zipfile = None,
    )
scroll top