1

我有一个很好的简单脚本向 gmail 地址发送电子邮件。非常简单,并且在运行 Python IDLE 后可以正常工作。

使用 GUI2Exe(使用 py2exe 和 cx_freeze)使其成为 exe 后,我收到此错误:

Traceback (most recent call last):
  File "something.py", line 4, in <module>
  File "smtplib.pyc", line 46, in <module>
ImportError: No module named email.utils

它不称为email.py,我的计算机上没有任何类似的名称(我已阅读有关此问题的所有内容)

我也尝试从 something.py 和 smtplib.py 中强制它:

opts = {'py2exe': { "includes" : ["email.utils"] }}

根本没有区别。从 IDLE 运行很好,但在 gui2exe 之后...错误。

我的 Lib 目录中确实有这个电子邮件目录,它确实包含 utils。但这很明显,因为从 IDLE 脚本可以正常工作。

原脚本:

import smtplib
fromaddr = 'blablu@gmail.com'
toaddrs  = 'blipblop@gmail.com'
msg = 'There was a terrible error that occured and I wanted you to know!'

# Credentials (if needed)
username = 'blablu'
password = 'passbla'

# The actual mail send
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

我现在已经厌倦了,对不起。我完全不知道发生了什么。

有人可以告诉我我做错了什么吗?

4

1 回答 1

1

我试图直接冻结你运行 cx_Freeze 的脚本,它运行得非常好。由于 GUI2exe 只是一个图形用户界面,我建议您也尝试直接运行 cx_Freeze,因为这消除了 GUI2exe 引起的任何可能的问题。

假设您要创建一个命令行应用程序,这是您需要使用上述代码在文件旁边创建的 setup.py 文件(在 setup.py 中,我假设您的代码称为“smtpTest.py”):

import os, sys
from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {'packages': [],
                     'excludes': ['tkinter'],
                     'includes': []}

setup(  version = '0.1',
        description = 'sends mails',
        options = {'build_exe': build_exe_options},
        executables = [Executable('smtpTest.py', targetName="smptMailer.exe")])

然后打开命令行并转到存储文件和 setup.py 文件的目录并键入:

python setup.py build

在构建过程之后,您的可执行文件将位于一个名为“build”的新文件夹中。

于 2013-04-30T19:02:08.960 回答