1

この python27 32 ビット コードは IDLE では完全に動作しますが、py2exe でパッケージ化すると... あまり良くありません。これは、欠落している Tk() の質問の複製ではありません。py2exe で生成された実行可能ファイルを実行すると、他の何かが初期化されていないように見えます。

C:\python\python_ui\exe\dist>basic.exe
Traceback (most recent call last):
  File "basic.py", line 7, in <module>
  File "PIL\ImageTk.pyo", line 117, in __init__
  File "Tkinter.pyo", line 3367, in __init__
  File "Tkinter.pyo", line 3304, in __init__
RuntimeError: Too early to create image
Exception AttributeError: "'PhotoImage' object has no attribute '_PhotoImage__photo'" in <bound method PhotoImage.__del__ of <PIL.ImageTk.Ph
otoImage object at 0x02CA3A90>> ignored

basic.py - 非常に基本的な例で、はい、Tk() が初期化されています。また、モジュールのバージョンは、IDLE() と実行可能バージョンの両方で一致しているように見えます

from Tkinter import *
from PIL import Image, ImageTk

root = Tk()

image = Image.open("background.jpg")
photo = ImageTk.PhotoImage(image)

label = Label(image=photo)
label.image = photo # keep a reference!
label.pack()

root.mainloop()

setup.py - これが私の py2exe セットアップで、python setup.py py2exe実行可能ファイルを取得するために実行します。

import py2exe, sys, os
from distutils.core import setup
from glob import glob

sys.path.append("C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\redist\\x86\\Microsoft.VC90.CRT")
sys.argv.append('py2exe')
setup( 
  data_files = [
      ("Microsoft.VC90.CRT", glob(r'C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*')),
      ("background.jpg"),
      ],
  options = {         
    'py2exe' : {
        'compressed': 1, 
        'optimize': 2,
        'bundle_files': 3, 
        'dist_dir': 'dist',  
        'dll_excludes': ["MSVCP90.dll"]
        }
    },                   
  zipfile=None, 
  console = [{'script':'user_code.py'}, {'script':'basic.py'}],
)

バージョン情報が一致し、イメージを印刷すると、実行可能ファイルと同じように IDLE() から実行すると同じ値が得られます。

  • ピル 3.4.2
  • tkinter $リビジョン: 81008 $
  • PIL.JpegImagePlugin.JpegImageFile 画像モード=RGB サイズ=179x119 at 0x3DF6A50
4

1 に答える 1

1

他のすべてが失敗した場合は、すべてを再構築します...

  1. 32 ビットの python27.12 をアンインストールします。
  2. install 32bit python27.10 // 12 もおそらく動作します
  3. ピップインストールピップ
  4. ピップインストールピロー
  5. MSVC9をインストール
  6. ピップインストールpy2exe
  7. 古いpy2exeから以前のディストリビューションビルドをすべて削除します
  8. 実行可能ファイルを再生成します

できます!

于 2016-12-08T07:56:20.610 に答える