2013-02-20 23 views
12

Tôi đang cố gắng để sử dụng giải pháp bạc hà của quy vào liên kết này để tạo ra một tập tin exe duy nhất cho chương trình dựa Tkinter tôi:Tạo EXE duy nhất sử dụng py2exe cho một chương trình Tkinter

py2exe - generate single executable file

Đây là những gì tôi đã viết trong các setup.py:

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

sys.argv.append('py2exe') 

setup(windows=[{'script': 'filename.py'}], \ 
      options={"py2exe": {"includes": ["decimal", "Tkinter", \ 
      "tkFileDialog", "csv", "xml.dom.minidom", "os"], \ 
      'bundle_files': 1, 'compressed': False}}, \ 
      zipfile = None) 

nó tạo ra một thư mục 'tcl' cho Tkinter thứ mặc dù tôi đã xác định bundle_files = 1. Ngoài ra nó cũng tạo ra một số w9xpopen.exe exe khác. Tuy nhiên, exe thực sự của tôi không chạy, và nó cũng không đưa ra bất kỳ lỗi nào. Nó thậm chí không hoạt động nếu tôi loại bỏ tất cả những người bao gồm.

Bất kỳ suy nghĩ nào về những gì tôi có thể bị thiếu ở đây? Tôi đang làm việc trên máy tính Windows 7 64 bit.

+0

Tính năng này có hoạt động không có 'bundle_files' không? –

+0

Nó theo cách đó, nhưng tôi dự định gộp mọi thứ vào một tệp exe duy nhất. bundle_files = 3 hoạt động tốt. –

+0

một số bài viết chỉ ra rằng bundle_files 1 & 2 không hoạt động với hệ thống 64 bit ... – charo

Trả lời

10

Nhờ this link, bạn phải chỉnh sửa site-packages/py2exe/build_exe.py và thêm "tcl85.dll""tk85.dll" vào danh sách dlls_in_exedir. Điều này sẽ làm cho nó chạy, mặc dù bạn vẫn sẽ có các thư mục tcl, và hai dll đó sẽ ở đó cùng với exe. Nhưng đó là cách tốt hơn so với bundle_files=3.

 self.dlls_in_exedir = [python_dll, 
           "w9xpopen%s.exe" % (is_debug_build and "_d" or ""), 
           "msvcr71%s.dll" % (is_debug_build and "d" or ""), 
           "tcl85.dll", 
           "tk85.dll"] 
Các vấn đề liên quan