Question

py2exe ne fonctionne pas avec le module de messagerie standard

Bonjour. J'essaie d'utiliser py2exe pour convertir un script en exe. Le processus de construction montre ceci:

Les modules suivants semblent être manquants

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

L'exécutable ne fonctionne pas. Les modules référencés ne sont pas inclus. J'ai fait des recherches sur Internet et j'ai découvert que py2exe avait un problème avec l'importation paresseuse utilisée dans le module de messagerie lib standard. Malheureusement, je n'ai pas réussi à trouver une solution de contournement à ce problème. Quelqu'un peut-il aider?

Merci,

P.S. Les importations dans le script se présentent comme suit:

Code: tout sélectionner     chaîne d'importation, heure, système, os, smtplib     depuis email.MIMEMultipart importer MIMEMultipart     depuis email.MIMEBase importer MIMEBase     depuis email.MIMEText importer MIMEText     depuis les encodeurs d'importation de courrier électronique

Était-ce utile?

La solution

Si vous n’avez pas à travailler avec py2exe, bbfreeze fonctionne mieux et j’ai essayé avec le module de messagerie. http://pypi.python.org/pypi/bbfreeze/0.95.4

Autres conseils

Consultez cette question comment-mettre-paquet-twisted-programme -with-py2exe , il semble que ce soit le même problème.

La réponse donnée est d'inclure explicitement les modules sur la ligne de commande de py2exe.

Quelle version de Python utilisez-vous? Si vous utilisez 2.5 ou 2.6, alors vous devriez effectuer votre importation comme suit:

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

Je suis à peu près certain que le modulefinder de py2exe peut trouver le paquet de messagerie correctement si vous l'utilisez correctement (c'est-à-dire, utilisez les noms ci-dessus dans Python 2.5+ ou les anciens noms dans Python 2.4-). Il est certain que le script de configuration de SpamBayes n’a pas besoin d’inclure explicitement le paquet de messagerie, et il inclut les modules de messagerie sans problème.

Les autres réponses sont correctes en ce sens que si vous avez besoin d'inclure spécifiquement un module, vous utilisez l'option "includes". option, soit via la ligne de commande, soit en les transmettant lorsque vous appelez l’installation.

Utilisez l’option "Inclut". option. Voir: http://www.py2exe.org/index.cgi/ListOfOptions

Je l'ai obtenu en incluant explicitement les modules manquants dans setup.py:

OLD setup.py:

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

Nouvelle configuration.py:

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

en portant mon application de py24 à 26, j'ai eu le même problème.

Après avoir lu http://www.py2exe.org/index.cgi/ExeWithEggs si finalement trouvé solution suivante:

dans mon 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

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

Pour que py2exe fonctionne avec les packages chargés au moment de l'exécution, il semble que l'important est que vous importiez explicitement les modules nécessaires à votre application quelque part dans votre application. Ensuite, donnez à py2exe dans setup.py avec moudlefinder.AddPackagePath (,) l’indice, où rechercher les modules qu’il n’a pas trouvés par std. introspection. dans l'application

Ceci résout mon problème: dans setup.py edit

includes = ["email"]

Veuillez essayer ceci. Cela fonctionne sur mon build py2exe. Il suffit de remplacer " nom_projet.py " avec votre script principal. EXTRA_INCLUDES sont des packages que vous devez inclure dans votre version, comme un package de courrier électronique. Je travaille avec vous aussi.

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,
    )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top