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?


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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.