ImportError: No module named header

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
LonelyPixel
User
Beiträge: 3
Registriert: Mittwoch 26. September 2007, 11:01

Hallo,

ich bin neu in Python und versuche gerade, ein Skript zu reparieren. Es geht um rss2email, das in Python geschrieben ist. Eigentlich komm ich mehr von PHP, C* und dergleichen, aber so schwer sieht Python jetzt auch nicht aus. Nun wollte ich eine Funktion, die E-Mail-Header kodiert, durch eine andere ersetzen, die laut Python-Dokumentation besser sei. Hoffentlich funktioniert die dann auch richtig im Gegensatz zur alten, die sich nicht an RFC 822 hält, auf dessen Korrektheit Thunderbird leider (verständlicherweise) besteht.

Das ist der Code, der da stand:

Code: Alles auswählen

def header7bit(s):
    return mimify.mime_encode_header(s + ' ')[:-1]
Der sieht so aus, als würde die Zeichenkette eben so kodiert werden, dass sie in einem E-Mail-Header verwendet werden kann. Wozu das Leerzeichen angefügt und scheinbar wieder abgeschnitten wird, weiß ich nicht.

Ich wollte das nun durch folgendes ersetzen:

Code: Alles auswählen

from email.header import Header
def header7bit(s):
    return Header(s, 'utf-8')
Leider kennt mein Python 2.4.1 dieses Modul nicht und zeigt diesen Fehler an:

Code: Alles auswählen

Traceback (most recent call last):
  File "rss2email.py", line 129, in ?
    from email.header import Header   # MOD-YG: Fix Subject message header encoding
ImportError: No module named header
Hier ist die Dokumentation, aus der ich das Beispiel übernommen habe:
http://docs.python.org/lib/module-email.header.html

Leider scheint die Doku falsch oder meine Installation kaputt zu sein. Oder funktioniert das so nicht? Kann mir das jemand erklären?
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Hallo LonelyPixel

Das modul 'header' heist erst seit Python2.5 so.
Bei Python 2.3 und 2.4 ist der Modulname leider noch 'Header'
Somit musst du das Modul so importieren:

from email.Header import Header

Musst du mal schauen ob es auch die Funktinoalitäten bietet die du dir erhoffst.
BlackJack

Die Module wurden umbenannt um dem Style Guide besser zu folgen. Ich glaube beim letzten "Google Summer of Code" oder wie das heisst, wurde am `email`-Package auch ordentlich gearbeitet. Vielleicht hat sich da noch mehr verändert.

Auf der Webseite gibt's auch Doku zu älteren Python-Versionen:

http://www.python.org/doc/2.4.1/lib/mod ... eader.html

Falls die Funktionalität, die Du brauchst, gleich geblieben oder zumindest rückwärtskompatibel ist, kannst Du so importieren:

Code: Alles auswählen

try:
    from email.header import Header
except ImportError:
    from email.Header import Header
LonelyPixel
User
Beiträge: 3
Registriert: Mittwoch 26. September 2007, 11:01

Danke, das hat geholfen. Ich hab mich zuerst einfach mal durchgegoogelt und dabei die aktuellste Python-Doku gefunden, die eben nicht zu meiner Installation gepasst hat. Find ich aber auch nicht sehr benutzerfreundlich, hier in der (ohnehin schon knappen) offiziellen Doku nicht auf Versionsinkompatibilitäten hinzuweisen. Naja.

Und die neue Funktion funktioniert wirklich besser. Die alte (mimify) hatte den Fehler, einzelne Wörter zu kodieren, wenn sie Sonderzeichen enthalten, und die einzelnen MIME Words durch Leerzeichen zu trennen. Dabei gehen die Leerzeichen im eigentlichen Text aber verloren. Die neue Funktion kodiert stattdessen den ganzen String, inkl. der Leerzeichen.

Was noch gefehlt hat ist die str()-Funktion, um aus dem Header-Objekt einen String zu machen. Jetzt funktioniert alles wunderbar. :)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

LonelyPixel hat geschrieben:Danke, das hat geholfen. Ich hab mich zuerst einfach mal durchgegoogelt und dabei die aktuellste Python-Doku gefunden, die eben nicht zu meiner Installation gepasst hat. Find ich aber auch nicht sehr benutzerfreundlich, hier in der (ohnehin schon knappen) offiziellen Doku nicht auf Versionsinkompatibilitäten hinzuweisen. Naja.
Das macht sie schon: http://docs.python.org/lib/email-pkg-history.html. Ganz allgemein legt die Doku großen Wert darauf, Rückwärtsinkompatibilitäten aufzuzeigen.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
LonelyPixel
User
Beiträge: 3
Registriert: Mittwoch 26. September 2007, 11:01

Uhh, da hab ich was gesagt... Nagut, dann nehm ich diese Behauptung hiermit zurück. Hab's trotzdem nicht auf Anhieb gefunden. Bin halt ein PHP- und .NET-Coder, und daher vermutlich nur einen ganz anderen Dokumentationsstil gewohnt.
Antworten