Frage

py2exe nicht mit der Standard-E-Mail-Modul arbeitet

Hallo. Ich versuche, py2exe zu verwenden, um ein Skript in eine exe zu konvertieren. Der Build-Prozess zeigt dies:


Die folgenden Module erscheinen zu fehlen

[ 'email.Encoders', 'email.Generator', 'email.Iterators', 'email.MIMEBase', 'email.MIMEMultipart', 'email.MIMEText', 'email.Utils', ‚email.base64MIME ‚]

Die ausführbare Datei funktioniert nicht. Die genannten Module sind nicht enthalten. Ich erforschte diese im Internet und ich fand heraus, dass py2exe ein Problem mit dem faulen Import hat im Standard-lib E-Mail-Modul verwendet. Leider ist es gelungen, ich keine Abhilfe für dieses Problem zu finden. Kann mir jemand helfen?

Danke,

P. S. Die Einfuhren in das Skript wie folgt aussehen:

Code: Alles auswählen     import string, Zeit, sys, os, smtplib     von email.MIMEMultipart Import MIMEMultipart     von email.MIMEBase Import MIMEBase     von email.MIMEText Import Mime     von E-Mail-Import-Encoder

War es hilfreich?

Lösung

Wenn Sie nicht mit py2exe arbeiten, arbeitet bbfreeze besser, und ich habe es mit der E-Mail-Modul versucht. http://pypi.python.org/pypi/bbfreeze/0.95.4

Andere Tipps

Haben Sie einen Blick auf diese Frage how-to-Paket-twisted-Programm -mit-py2exe es scheint das gleiche Problem zu sein.

Die Antwort gibt es explizit die Module in der Befehlszeile enthält, um Py2exe.

Welche Version von Python verwenden Sie? Wenn Sie 2.5 oder 2.6 verwenden, dann sollten Sie Ihren Import tun wie:

import string,time,sys,os,smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import Encoders

Ich bin mir ziemlich sicher, dass py2exe der modulefinder richtig das E-Mail-Paket finden kann, wenn Sie es richtig verwenden (das heißt die oben genannten Namen in Python verwenden 2.5+, oder die alten Namen in Python verwenden 2.4-). Sicherlich der SpamBayes Setup-Skript muss nicht explizit das E-Mail-Paket enthält, und es enthält die E-Mail-Module ohne Problem.

Die anderen Antworten in das korrekt sind, wenn Sie speziell benötigen, um ein Modul enthalten, verwenden Sie das „auch“ Option, entweder über die Befehlszeile oder auf Reisen, sie in, wenn Sie das Setup aufrufen.

Mit der „schließt“ -Option. Siehe: http://www.py2exe.org/index.cgi/ListOfOptions

Ich habe es durch die expliziten Arbeits einschließlich fehlende Module in setup.py:

OLD setup.py:

setup(console = ['main.py'])

New setup.py:

setup(console = ['main.py'], 
      options={"py2exe":{"includes":["email.mime.multipart","email.mime.text"]}})

, während meine App von py24 bis 26 Portierung hatte ich das gleiche Problem.

Nach dem Lesen http://www.py2exe.org/index.cgi/ExeWithEggs wenn finaly folgende Lösung gefunden:

in meinem application.py:

import email
import email.mime.text
import email.mime.base
import email.mime.multipart
import email.iterators
import email.generator
import email.utils

try:    
    from email.MIMEText import MIMEText
except:    
    from email.mime import text as MIMEText

in setup.py:

import modulefinder
modulefinder.AddPackagePath("mail.mime", "base")
modulefinder.AddPackagePath("mail.mime", "multipart")
modulefinder.AddPackagePath("mail.mime", "nonmultipart")
modulefinder.AddPackagePath("mail.mime", "audio")
modulefinder.AddPackagePath("mail.mime", "image")
modulefinder.AddPackagePath("mail.mime", "message")
modulefinder.AddPackagePath("mail.mime", "application")

Für py2exe mit Paketen während der Laufzeit geladen zu arbeiten, scheint die Hauptsache zu sein, dass u explizit die Module importiert werden benötigt um Ihre App irgendwo in Ihrer App. Und dann geben py2exe in setup.py mit moudlefinder.AddPackagePath (,) dem Hinweis, wo für Module zur Suche nicht von std finden konnte. Selbstbeobachtung. in der App

Dieses mein Problem lösen: in setup.py bearbeiten

includes = ["email"]

Bitte versuchen Sie dies. Dies funktioniert auf meinem py2exe zu bauen. Ersetzen Sie einfach „project_name.py“ mit Ihrem Haupt-Skript. Die EXTRA_INCLUDES sind Pakete, die Sie brauchen in Ihrem Build wie E-Mail-Paket enthalten sein. Ich dies funktioniert auch mit Ihnen.

from distutils.core import setup
    import py2exe, sys, os

    sys.argv.append('py2exe')

    EXTRA_INCLUDES = [
        "email.iterators", "email.generator", "email.utils", "email.base64mime", "email", "email.mime",
        "email.mime.multipart", "email.mime.text", "email.mime.base",
        "lxml.etree", "lxml._elementpath", "gzip"
    ]

    setup(
        options = {'py2exe': {'bundle_files': 1, 'compressed': True, 'includes': EXTRA_INCLUDES,
                    'dll_excludes': ['w9xpopen.exe','MSVCR71.dll']}},
        console = [{'script': "project_name.py"}],
        zipfile = None,
    )
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top