Python 3.x ImportError: 找不到模块名为'cStringIO'

112
我该如何解决Python 3.x中的 "ImportError: No module named 'cStringIO'" 错误?

3
谢谢。接受 @SimonVissers 的解决方案。我不应该尝试安装“email”,因为它已经作为一个模块可用了。只需将“email”导入代码,并根据需要修改应用程序代码即可。 - jvi
1
这是迁移到3.x时普遍存在的问题,而不仅仅涉及安装任何特定的包,例如电子邮件。 - smci
3个回答

179

从Python 3.0日志中可以看到:

StringIO和cStringIO模块已经弃用。取而代之的是,导入io模块并使用io.StringIO或io.BytesIO用于文本和数据。

Python 3电子邮件文档中可以看出应该使用io.StringIO代替:

from io import StringIO
from email.generator import Generator

fp = StringIO()
g = Generator(fp, mangle_from_=True, maxheaderlen=60)
g.flatten(msg)
text = fp.getvalue()

5
我的Python环境中存在io模块。但是我无法安装email本身,这是我的问题。即“pip install email”失败了。我应该入侵某些代码并进行更改才能安装吗? - jvi
20
你不应该安装 email,而应该只导入它,因为它是Python标准库的一部分。 - Simeon Visser

16

我曾经遇到过相同的问题,因为我的文件名叫做email.py。我将文件重命名后问题就消失了。


0

我遇到了问题,因为我的目录名叫做email。我将目录重命名为emails,问题就解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接