我有一个很好的简单脚本,可以将电子邮件发送到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()
我现在已经厌倦了,抱歉。我根本不知道发生了什么。
有人能告诉我我做错了什么吗?
答案 0 :(得分: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”的新文件夹中。