1

gmailアドレスにメールを送信する簡単なスクリプトがあります。非常にシンプルで、実行後の Python IDLE から正常に動作します。

GUI2Exe(py2exeとcx_freezeを使用)でexeにした後、次のエラーが発生します:

Traceback (most recent call last):
  File "something.py", line 4, in <module>
  File "smtplib.pyc", line 46, in <module>
ImportError: No module named email.utils

これはemail.pyという名前ではなく、自分のコンピューターにはそのように呼ばれるものはありません (この問題に関するすべてを読みました)。

私はまた、something.pyとsmtplib.pyの両方からそれを強制しようとしました:

opts = {'py2exe': { "includes" : ["email.utils"] }}

まったく違いはありません。IDLE からの実行は素晴らしいが、gui2exe の後...エラー。

このメール ディレクトリは Lib ディレクトリにあり、utils が含まれています。しかし、IDLE からスクリプトが正常に動作するため、これは明らかです。

元のスクリプト:

import smtplib
fromaddr = 'blablu@gmail.com'
toaddrs  = 'blipblop@gmail.com'
msg = 'There was a terrible error that occured and I wanted you to know!'

# Credentials (if needed)
username = 'blablu'
password = 'passbla'

# The actual mail send
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

もううんざりです、ごめんなさい。何が起こっているのかまったくわかりません。

誰かが私が間違っていることを教えてもらえますか?

4

1 に答える 1

1

cx_Freeze を直接実行しているスクリプトをフリーズしようとしましたが、問題なく動作しました。GUI2exe はグラフィカル ユーザー インターフェイスにすぎないため、cx_Freeze を直接実行することをお勧めします。これにより、GUI2exe が原因で発生する可能性のある問題が排除されます。

コマンド ライン アプリを作成する場合、上記のコードを含むファイルの隣に setup.py ファイルを作成する必要があります (setup.py では、コードは "smtpTest.py" と呼ばれていると想定しています)。

import os, sys
from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {'packages': [],
                     'excludes': ['tkinter'],
                     'includes': []}

setup(  version = '0.1',
        description = 'sends mails',
        options = {'build_exe': build_exe_options},
        executables = [Executable('smtpTest.py', targetName="smptMailer.exe")])

次に、コマンドラインを開き、ファイルと setup.py ファイルが保存されているディレクトリに移動して、次のように入力します。

python setup.py build

ビルド プロセスの後、実行可能ファイルは「build」という名前の新しいフォルダーに作成されます。

于 2013-04-30T19:02:08.960 に答える