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.