2013-02-11 28 views
9

Tôi đang làm việc để chuyển đổi một tập lệnh GUI đơn giản được viết bằng Python 2.7 và Pyqt4 thành một tệp thực thi độc lập sử dụng py2exe. Tôi tiếp tục nhận được lỗi "không có tệp như vậy tồn tại", và tôi đã cố gắng khắc phục một số lỗi, mặc dù điều này có vẻ bướng bỉnh. Nó không thể tìm thấy msvcp90.dll, và trả về một thông báo lỗi với một traceback ngắn để distutils và sau đó trở lại kịch bản py2exe của tôi, mà không phải là rất enlightening. Tôi đã cài đặt MS C++ runtime phân phối chung, theo khuyến cáo trongpy2exe không thể tìm thấy msvcp90.dll

py2exe fails to generate an executable

nhưng kịch bản của tôi vẫn không thể xác định vị trí .dll. Dưới đây là kịch bản py2exe tôi, với tên của kịch bản của tôi bị chặn ra:

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

sys.argv.append('py2exe') 

os.environ["PATH"] = \ 
os.environ["PATH"] + \ 
os.path.pathsep + os.path.split(zmq.__file__)[0] 

setup(
    options = {'py2exe':{'bundle_files':1,"includes":["zmq.utils", 
      "zmq.utils.jsonapi","zmq.utils.strtypes"]}}, 
    console = [{'script':"#######.py"}], 
    zipfile = None 
) 

Tôi đã cố định một vấn đề với zmq (mà không bao giờ được sử dụng bởi kịch bản của tôi, hoặc GUI của tôi, cho rằng vấn đề, theo như tôi biết). Tôi đang làm gì sai?

+0

Tôi nghĩ lý do zmq được bao gồm là do '' ' "bao gồm": [" zmq '''' stuff (và có thể là '' 'import sys, os, zmq''' stanza) – dja

Trả lời

9

Đúng vậy, tôi đã quản lý để ứng dụng của mình xây dựng và mặc dù câu hỏi hiện đã ở mức độ vừa phải, đó là hy vọng của tôi cuối cùng cũng được sử dụng cho ai đó.

Thứ nhất, py2exe có lẽ là công cụ sai. Đó là cũ và AFAICT unmaintained. Thay vào đó hãy xem xét PyInstaller. Sử dụng PyInstaller đơn giản là cài đặt nó, cài đặt PyWin32, và sau đó đi python %path_to_pyinstaller%/pyinstaller.py --onefile --windowed source.py. PyInstaller giao dịch với tất cả các mớ hỗn độn của các hội đồng bên cạnh và như vậy mà không cần phải làm gì cả.

Tóm lại, sử dụng PyInstaller.

Tuy nhiên, để trả lời câu hỏi của bạn, điều này đã làm việc cho tôi:

  1. Các câu hỏi mà bạn đã liên kết với - đặc biệt this answer là sự bắt đầu ngay. Tìm các tệp DLL phù hợp và sao chép chúng vào C: \ Python27 \ DLLs
  2. Mương tệp setup.py hiện tại của bạn. Nếu bạn không sử dụng zmq, không có lý do gì để nhập. Ngoài ra, đối với một ứng dụng cửa sổ bạn muốn windows= không phải console=. tập tin của tôi đi (đối với bao bì show.py):

    #!/usr/bin/python 
    
    from distutils.core import setup 
    import py2exe 
    
    setup(options={'py2exe':{'bundle_files':1}}, 
         windows=['show.py']) 
    

    (này bị cản trở http://www.blog.pythonlibrary.org/2010/07/31/a-py2exe-tutorial-build-a-binary-series/)

+0

Giải pháp của bạn có kịch bản của tôi để xây dựng một exe, nhưng nó vẫn chưa hoạt động đúng. – bythenumbers

+1

Hóa ra rằng Thomas Heller vẫn đóng góp! Http://sourceforge.net/p/py2exe/svn/737/tree/trunk/py2exe/ChangeLog – Barton

+0

Khá đúng là ['pyinstaller'] (https://github.com/pyinstaller/pyinstaller/commits/develop) hoạt động mạnh hơn [' py2exe'] (http://sourceforge.net/p/py2exe/svn/737/tree/ trunk/py2exe/ChangeLog). – Antonio