Python - Py2exe无法使用'email'模块构建.exe

时间:2008-10-06 13:02:03

标签: python winapi py2exe

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     来自电子邮件导入编码器

8 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

您使用的是哪个版本的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”选项,或者在你调用setup时传入它们。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

OLD setup.py:

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

新的setup.py:

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

答案 5 :(得分:0)

将我的应用程序从py24移植到26时,我遇到了同样的问题。

阅读http://www.py2exe.org/index.cgi/ExeWithEggs后 如果最终找到解决方案:

我的application.py中的

import email
import email.mime.text
import email.mime.base
import email.mime.multipart
import email.iterators
import email.generator
import email.utils

try:    
    from email.MIMEText import MIMEText
except:    
    from email.mime import text as MIMEText
setup.py中的

import modulefinder
modulefinder.AddPackagePath("mail.mime", "base")
modulefinder.AddPackagePath("mail.mime", "multipart")
modulefinder.AddPackagePath("mail.mime", "nonmultipart")
modulefinder.AddPackagePath("mail.mime", "audio")
modulefinder.AddPackagePath("mail.mime", "image")
modulefinder.AddPackagePath("mail.mime", "message")
modulefinder.AddPackagePath("mail.mime", "application")

对于py2exe使用在运行时加载的包,主要的事情似乎是你明确地在应用程序的某个地方导入应用程序所需的模块。 然后在setup.py中使用moudlefinder.AddPackagePath(,)提示py2exe,在那里搜索std无法找到的模块。内省。 在应用程序

答案 6 :(得分:0)

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

includes = ["email"]

答案 7 :(得分:0)

请试试这个。这适用于我的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,
    )