python 3.x ImportError: Kein Modul mit dem Namen 'cStringIO'

75

Wie löse ich eine ImportError: No module named 'cStringIO'unter Python 3.x?

jvi
quelle
3
thx- Akzeptieren der @ SimonVissers-Lösung. Ich hätte nicht versuchen sollen, "email" zu installieren, da es als Modul verfügbar ist. Importieren Sie einfach E-Mails in den Code und nehmen Sie die erforderlichen Änderungen am Anwendungscode vor.
jvi
Dies ist ein allgemeines Problem bei der Migration auf 3.x und nicht nur bei der Installation eines bestimmten Pakets, z. B. E-Mail.
smci

Antworten:

116

Aus Python 3.0 Changelog;

Die Module StringIO und cStringIO sind weg. Importieren Sie stattdessen das io-Modul und verwenden Sie io.StringIO oder io.BytesIO für Text bzw. Daten.

Aus der Python 3-E-Mail-Dokumentation geht hervor, dass io.StringIOstattdessen Folgendes verwendet werden sollte:

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()

Referenz: https://docs.python.org/3/library/io.html

Simeon Visser
quelle
5
Das io-Modul ist in meiner Python-Umgebung vorhanden. Ich kann jedoch keine E-Mail selbst installieren, was mein Problem war. dh "pip install email" schlägt fehl. Soll ich mich in Code hacken und Änderungen vornehmen, damit er installiert wird?
Jvi
16
@jvi: Sie sollten nicht installieren email, sondern nur import emailals Teil der Python-Standardbibliothek.
Simeon Visser
13

Ich hatte das gleiche Problem, weil meine Datei email.py hieß . Ich habe die Datei umbenannt und das Problem ist verschwunden.

Maeda
quelle