8

py2exeは標準の電子メールモジュールでは機能しません

こんにちは。スクリプトをexeに変換するためにpy2exeを使用しようとしています。ビルドプロセスはこれを示しています:


次のモジュールが欠落しているようです

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

実行可能ファイルが機能しません。参照されるモジュールは含まれていません。これをインターネットで調べたところ、py2exeに標準のlib電子メールモジュールで使用されているレイジーインポートに問題があることがわかりました。残念ながら、私はこの問題の回避策を見つけることに成功していません。誰か助けてもらえますか?

ありがとうございました、

スクリプト内のPSインポートは次のようになります。

コード:email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText from email importEncodersからすべてのインポート文字列、time、sys、os、smtplibを選択します

4

8 に答える 8

4

どのバージョンの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セットアップスクリプトには電子メールパッケージを明示的に含める必要はなく、問題なく電子メールモジュールが含まれています。

他の答えは正しいです。モジュールを具体的に含める必要がある場合は、コマンドラインから、またはsetupを呼び出すときにそれらを渡すことにより、「includes」オプションを使用します。

于 2008-10-06T21:38:17.923 に答える
4

この質問を見てください。how-to-package-twisted-program-with-py2exe同じ問題のようです。

そこに与えられた答えは、py2exeのコマンドラインにモジュールを明示的に含めることです。

于 2008-10-06T13:05:01.487 に答える
2

「含む」オプションを使用します。参照:http ://www.py2exe.org/index.cgi/ListOfOptions

于 2008-10-06T15:31:13.627 に答える
1

py2exeを使用する必要がない場合は、bbfreezeの方がうまく機能します。私は、電子メールモジュールで試してみました。http://pypi.python.org/pypi/bbfreeze/0.95.4

于 2008-10-06T13:09:26.687 に答える
0

これを試してください。これは私の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,
    )
于 2014-09-20T09:20:36.467 に答える
0

アプリをpy24から26に移植しているときに、同じ問題が発生しました。

http://www.py2exe.org/index.cgi/ExeWithEggsを読んだ後 、最終的に次の解決策が見つかった場合:

私の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

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 が実行時にロードされたパッケージで動作するためには、アプリで必要なモジュールをアプリのどこかに明示的にインポートすることが主なことのようです。そして、moudlefinder.AddPackagePath( , ) を使用して setup.py で py2exe にヒントを与えます。これは、std で見つけることができなかったモジュールを検索する場所です。内省。アプリで

于 2009-07-28T14:56:32.663 に答える
0

これは私の問題を解決します: setup.py 編集で

includes = ["email"]
于 2013-09-03T22:16:01.253 に答える