Python - Py2exe kann nicht bauen exe mit der E-Mail-MODULE
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
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,
)