Python – Py2exe не может собрать .exe с помощью модуля «email»

StackOverflow https://stackoverflow.com/questions/174170

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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


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

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

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

Спасибо,

P.S.Импорт в скрипте выглядит так:

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

Это было полезно?

Решение

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

Другие советы

Взгляните на этот вопрос как упаковать-twisted-программу-с-py2exe похоже, это та же проблема.

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

Какую версию 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

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

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

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

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

СТАРАЯ установка.py:

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

Новый setup.py:

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

при портировании моего приложения с 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( , ) подсказку, где искать модули, которые он не смог найти по стандартному стандарту.самоанализ.в приложении

Это решит мою проблему:в setup.py редактировать

includes = ["email"]

Пожалуйста, попробуйте это.Это работает на моей сборке py2exe.Просто замените «project_name.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,
    )
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top