Python - Py2exe не может собрать .exe используя модуль 'email' - PullRequest
7 голосов
/ 06 октября 2008

py2exe не работает со стандартным почтовым модулем

Hello. Я пытаюсь использовать py2exe для преобразования скрипта в исполняемый файл. Процесс сборки показывает это:


Следующие модули отсутствуют

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

Исполняемый файл не работает. Указанные модули не включены. Я исследовал это в Интернете и обнаружил, что у py2exe есть проблема с импортом Lazy, используемым в стандартном модуле электронной почты lib. К сожалению, мне не удалось найти решение этой проблемы. Кто-нибудь может помочь?

Спасибо,

P.S. Импорт в сценарии выглядит следующим образом:

код: выбрать все строка импорта, время, sys, os, smtplib из электронной почты. MIMEMultipart импорт MIMEMultipart из электронной почты. Импорт MIMEBase MIMEBase из электронной почты. MIMEText импорт MIMEText из электронной почты импорт кодировщики

Ответы [ 8 ]

4 голосов
/ 07 октября 2008

Какую версию Python вы используете? Если вы используете 2.5 или 2.6, то вы должны выполнять импорт следующим образом:

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

Я вполне уверен, что modulefinder py2exe может правильно найти пакет электронной почты, если вы используете его правильно (то есть используйте вышеуказанные имена в Python 2.5+ или используйте старые имена в Python 2.4-). Конечно, сценарию установки SpamBayes не нужно явно включать пакет электронной почты, и он включает модули электронной почты без проблем.

Другие ответы верны в том смысле, что если вам нужно специально включить модуль, вы используете опцию «include», либо через командную строку, либо передавая их при вызове setup.

4 голосов
/ 06 октября 2008

Посмотрите на этот вопрос. Как сделать пакет Twisted-Program-with-py2exe Кажется, что это та же проблема.

Ответ, который дан здесь, заключается в явном включении модулей в командной строке в py2exe.

2 голосов
/ 06 октября 2008

Используйте опцию «включает». Смотри: http://www.py2exe.org/index.cgi/ListOfOptions

1 голос
/ 24 июля 2015

Я заработал, явно включив отсутствующие модули в setup.py:

СТАРЫЙ setup.py:

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

Новый setup.py:

setup(console = ['main.py'], 
      options={"py2exe":{"includes":["email.mime.multipart","email.mime.text"]}})
1 голос
/ 06 октября 2008

Если вам не нужно работать с py2exe, bbfreeze работает лучше, и я попробовал это с модулем электронной почты. http://pypi.python.org/pypi/bbfreeze/0.95.4

0 голосов
/ 20 сентября 2014

Пожалуйста, попробуйте это. Это работает на моей сборке py2exe. Просто замените "имя_проекта.py" на ваш основной скрипт. EXTRA_INCLUDES - это пакеты, которые нужно включить в свою сборку, например, пакет электронной почты. Я это работает с вами также.

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,
    )
0 голосов
/ 04 сентября 2013

Это решит мою проблему: в setup.py edit

includes = ["email"]
0 голосов
/ 28 июля 2009

при переносе моего приложения с py24 на 26 у меня была такая же проблема.

После прочтения http://www.py2exe.org/index.cgi/ExeWithEggs если найдено окончательно следующее решение:

в моем приложении.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

в 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")

Чтобы py2exe работал с пакетами, загруженными во время выполнения, главное, чтобы вы явно импортировали модули, необходимые для вашего приложения, где-то в вашем приложении. А затем укажите py2exe в setup.py с помощью moudlefinder.AddPackagePath (,) подсказку, где искать модули, которые он не может найти с помощью std. самоанализ. в приложении

...