【问题标题】:ImportError: No module named 'email.mime'; email is not a package [duplicate]ImportError:没有名为“email.mime”的模块;电子邮件不是一个包[重复]
【发布时间】:2016-01-23 16:04:44
【问题描述】:

运行以下代码时,我不断收到错误:

ImportError: No module named 'email.mime'; email is not a package

所以我跑了:

pip install email

并得到以下错误:

ImportError: No module named 'cStringIO'...
Command "python setup.py egg_info" failed with error code 1

互联网告诉我要跑步:

pip install --upgrade pip

为了解决这个问题,我已经做过很多次了。我不知道我还能做什么。

Python 版本:Python 3.3.5 | Anaconda 2.3.0 (x86_64)

import smtplib,email,email.encoders,email.mime.text,email.mime.base

smtpserver = 'email@site.com'
to = ['address@gmail.com']
fromAddr = 'email@site.com'
subject = "testing email attachments"

# create html email
html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" '
html +='"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">'
html +='<body style="font-size:12px;font-family:Verdana"><p>...</p>'
html += "</body></html>"
emailMsg = email.MIMEMultipart.MIMEMultipart('text/csv')
emailMsg['Subject'] = subject
emailMsg['From'] = fromAddr
emailMsg['To'] = ', '.join(to)
emailMsg['Cc'] = ", ".join(cc)
emailMsg.attach(email.mime.text.MIMEText(html,'html'))

# now attach the file
fileMsg = email.mime.base.MIMEBase('text/csv')
fileMsg.set_payload(file('rsvps.csv').read())
email.encoders.encode_base64(fileMsg)
fileMsg.add_header('Content-Disposition','attachment;filename=rsvps.csv')
emailMsg.attach(fileMsg)

# send email
server = smtplib.SMTP(smtpserver)
server.sendmail(fromAddr,to,emailMsg.as_string())
server.quit()

【问题讨论】:

  • 在您运行脚本的目录中是否有一个名为email.py 的文件(或目录)?或者你的脚本甚至被称为email.py
  • @Evert nope,此目录中没有任何命名的电子邮件。
  • 您是否尝试过从 Python 提示符进行各种导入? &gt;&gt;&gt; import email, &gt;&gt;&gt; import email.mime?
  • "文件 "",第 1 行,在 文件 "./email.py",第 4 行":这看起来很可疑,您的脚本实际上被称为 email.py
  • 可能仍然存在 email.pyc 文件或 __pycache__ 目录,其中包含该文件的编译版本。

标签: python pip


【解决方案1】:

我刚才遇到了同样的问题。最后,我发现这是因为我将 python 文件命名为“email.py”。改名后就可以使用了。

【讨论】:

  • 同样的事情是的:)
  • 29 人点赞 = 29 人将他们的文件命名为“email.py”
  • 伙计,这是我很高兴在花了几个小时慢慢发疯之前检查了 StackOverflow 的事情之一。
  • @OneStig 和计数
  • 天哪。感谢您的回答。
【解决方案2】:

问题在于 pip。我无法使用

更新 setuptools
easy_install --upgrade setuptools

我也无法使用 pip 安装电子邮件

pip install email

我通过使用 easy_install 安装电子邮件解决了这个问题

easy_install email

希望有人觉得这很有帮助。感谢那些帮助过的人。

【讨论】:

  • 我还需要将导入从 import email.Parser 更改为 from email6.parser import Parser
  • 不,这很愚蠢。 email 是标准库的一部分。
【解决方案3】:

不要在你的 .py 文件名甚至包名中使用 "email"。 这将导致解释器混淆用户声明的模块和预定义的模块

【讨论】:

    【解决方案4】:

    我遇到了同样的问题。两个答案都帮助我解决了这个问题。 但是,除此之外,我还必须删除使用旧名称 email.py 运行脚本时创建的 email.pyc 文件。

    总结一下:

    • 确保已安装电子邮件模块
    • 删除运行名为 email.py 的脚本时创建的 email.pyc 文件
    • 将脚本重命名为其他名称

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 2018-10-16
      • 2014-07-15
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      相关资源
      最近更新 更多