بيثون - Py2exe لا يمكن بناء إكس باستخدام "البريد الإلكتروني" وحدة

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 مشكلة مع استيراد كسول المستخدمة في وحدة قياسية البريد الإلكتروني ليب. للأسف لم تنجح في إيجاد الحل لهذه المشكلة. يمكن لأي شخص أن تساعد؟

وشكرا لك،

وP.S. الواردات في السيناريو تبدو مثل هذا:

والرمز: حدد كافة     سلسلة الاستيراد، الوقت، تميز الكلية، نظام التشغيل، smtplib     من MIMEMultipart استيراد email.MIMEMultipart     من MIMEBase استيراد email.MIMEBase     من MIMEText استيراد email.MIMEText     من التشفير استيراد البريد الإلكتروني

هل كانت مفيدة؟

المحلول

إذا لم يكن لديك للعمل مع py2exe، bbfreeze تعمل على نحو أفضل، ولقد حاولت ذلك مع وحدة البريد الإلكتروني. http://pypi.python.org/pypi/bbfreeze/0.95.4

نصائح أخرى

وإلقاء نظرة على هذا السؤال كيف لحزمة الملتوية بين برنامج -مع-py2exe في هذا الشأن ويبدو أن نفس المشكلة.

والجواب هناك لتشمل صراحة الوحدات على سطر الأوامر لpy2exe.

ما هو إصدار بيثون الذي تستخدمه؟ إذا كنت تستخدم 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 يمكن العثور على حزمة البريد الإلكتروني إذا كنت تستخدم بشكل صحيح بشكل صحيح (أي استخدام الأسماء المذكورة أعلاه في بيثون 2.5+، أو استخدام أسماء القديمة في بيثون 2.4-). بالتأكيد النصي الإعداد SpamBayes لا يحتاج لتشمل صراحة حزمة البريد الإلكتروني، ويتضمن الوحدات البريد الإلكتروني من دون مشكلة.

والأجوبة أخرى صحيحة في أنه إذا كنت بحاجة لتشمل على وجه التحديد وحدة نمطية، يمكنك استخدام "يشمل" الخيار، إما عن طريق سطر الأوامر، أو تمريرها في عند استدعاء الإعداد.

استخدم هذا "يشمل" الخيار. انظر: http://www.py2exe.org/index.cgi/ListOfOptions

وحصلت عليه العمل من قبل بما في ذلك وحدات صراحة في عداد المفقودين في setup.py:

وsetup.py القديم:

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

وsetup.py جديد:

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

وهذا حل مشكلتي: في تحرير setup.py

includes = ["email"]

يرجى محاولة هذا. وهذا يعمل على بلدي py2exe بناء. مجرد استبدال "project_name.py" مع السيناريو الرئيسي الخاص بك. وEXTRA_INCLUDES هي الحزم التي تحتاج إلى تضمين في الإنشاء الخاصة بك مثل حزمة البريد الإلكتروني. I هذا يعمل معك أيضا.

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,
    )
scroll top