2011-10-09 23 views
7

Tôi là một lập trình viên python và tôi đang cố gắng xây dựng một tệp nhị phân có thể thực thi để phân phối phần mềm của tôi cho khách hàng của mình, ngay cả khi nó không hoàn toàn thực thi được Tôi muốn phân phối phần mềm của mình cách để thuận tiện cho người dùng cuối.Python - Khó khăn trong việc xây dựng tập tin thực thi

Tôi đã thử PyInstaller cũng như Py2Exe và tôi đang gặp phải sự cố tương tự với một phần mềm cụ thể.

Tôi đã sử dụng mô-đun tách cho chương trình của tôi (tất nhiên là một khung cấp cao mới để tương tác với các khung công tác khác như Selenium) và mỗi lần tôi cố gắng biên dịch nó có vẻ là một tệp có tên là "webdriver.xpi" đó luôn luôn là trái ra khỏi gói cuối cùng và do đó khi chương trình cố gắng để thực hiện các trình điều khiển web nó không thành công với một lỗi IO nói rằng tập tin "webdriver.xpi" đã không được tìm thấy .... nhưng khác hơn là GUI và mọi thứ hoạt động hoàn hảo tốt.

Vì vậy, có cách nào để bao gồm ngay cả theo cách thủ công không? Tôi đã thử bao gồm nó bằng tay bằng cách duyệt đến thư mục cụ thể @ library.zip tập tin nhưng nó không hoạt động.

Tôi không thực sự chuyên về vấn đề này và tôi dựa vào GUI2Exe để xây dựng mọi thứ ... và tôi thực sự sẽ đánh giá cao một số lời khuyên nếu có thể về cách sửa lỗi này.

Cảm ơn.

+0

Bạn có thể hiển thị các tập lệnh setup.py bạn được sử dụng cho py2exe? – chown

+0

Có thể bạn không chỉ cần thêm các tập tin vào thư mục ứng dụng trước khi chạy nó? – Fenikso

Trả lời

1

Bạn cần hướng dẫn trong số setup.py để bao gồm mọi tệp tài nguyên trong bản phân phối của mình. Có một số cách để thực hiện việc này (xem các bản phân phối, các công cụ thiết lập, phân phối - tùy thuộc vào những gì bạn đang sử dụng để xây dựng bản phân phối của bạn), nhưng wiki py2exe có một số example.

Bạn có thể cần phải sử dụng this py2exe tip để tìm tài nguyên của mình nếu bạn đang cài đặt chúng vào cùng thư mục với exe.

Xem this answer để biết thêm thông tin về việc bao gồm tệp tài nguyên trong bản phân phối của bạn.

10

Tôi đã ở đây cả ngày và tìm thấy một cách giải quyết, nó lén lút nhưng nó hoạt động. Trong thông báo lỗi tôi nhận được, tôi nhận thấy rằng có một khoảng trống giữa trong thư viện .zip. Tôi không thể theo dõi nó trong mã nguồn cho py2exe hoặc selenium. Tôi cũng đã thử đặt tệp xpi trong thư viện zip và nó không hoạt động. Cách giải quyết là:

  1. Trong tập tin cài đặt của bạn sử dụng các tùy chọn này:

    setup(
        console=['yourFile.py'], 
        options={ 
          "py2exe":{ 
            "skip_archive": True, 
            "unbuffered": True, 
            "optimize": 2 
          } 
        } 
    ) 
    
  2. Chạy py2exe cài đặt

  3. Sao chép tập tin xpi vào thư mục TP

Đó Hãy làm nó.

+1

Tôi đồng ý với aknatn, tôi đã tìm thấy giải pháp cho vấn đề này từ lâu nhưng hoàn toàn quên rằng tôi đăng các câu hỏi ở đây. Các giải pháp chính là bất cứ điều gì bạn làm ngay cả với một người thợ xây gui như GUI2Exe, chỉ cần đảm bảo gói cuối cùng là không nén hoặc bất cứ điều gì và tất cả mọi thứ được giải nén vào một thư mục mà bạn có thể thêm tập tin .xpi bằng tay và làm cho nó làm việc. Sau đó tôi sử dụng một cái gì đó như NSIS để gói nó vào một thuật sĩ cài đặt mát mẻ với thỏa thuận cấp phép, tập tin quan trọng, vv để phân phối nó cho bên thứ ba. Tôi phải nói rằng tôi đã học được rất nhiều từ rối tung xung quanh, cố gắng để có được Python để làm việc :) –

+0

Cảm ơn, làm thế nào về một cuộc bỏ phiếu lên ;-) – aknatn

+0

Lol Tôi đã làm thử mà ... nó nói Vote Up đòi hỏi 15 tiếng xD –

0

Tôi biết điều này là cũ, nhưng tôi muốn đưa ra một câu trả lời cập nhật để tránh cho thấy rằng các lập trình viên làm điều gì đó theo cách thủ công.

Có tùy chọn py2exe để chỉ định danh sách các tệp dữ liệu làm bộ dữ liệu.(pathtocopyto, [list of files and where to get them])

Ví dụ:

from disutils.core import setup 
import py2exe 

wd_base = 'C:\\Python27\\Lib\\site-packages\\selenium\\webdriver' 
RequiredDataFailes = [ 
    ('selenium/webdriver/firefox', ['%s\\firefox\\webdriver.xpi'%(wd_base), '%s\\firefox\\webdriver_prefs.json'%(wd_base)]) 
] 

setup(
    console=['MyScript.py'], 
    data_files=RequiredDataFiles, 
    options={ 
     **mypy2exeopts 
    } 
) 

Nhược điểm duy nhất tôi biết hiện nay là bạn vẫn cần skip_archive = True. Có nhiều cách giải quyết để lấy các tệp dữ liệu trong library.zip, nhưng tôi không có nhiều may mắn với thông tin của trình quản trị web.

1

Dưới đây là một giải pháp của câu hỏi của bạn: Tôi có sửa đổi một mã số ít và nó phải làm việc kể từ khi tôi có một vấn đề tương tự và tôi giải quyết nó:

from distutils.core import setup 
import py2exe 

wd_base = 'C:\\Python27\\Lib\site-packages\\selenium-2.44.0-py2.7.egg \\selenium\\webdriver' 
RequiredDataFailes = [ 
('selenium/webdriver/firefox', ['%s\\firefox\\webdriver.xpi'%(wd_base), '%s\\firefox\\webdriver_prefs.json'%(wd_base)]) 
] 

setup(
windows=[{"script":"gui_final.py"}],options={"py2exe":{"skip_archive": True,"includes":["sip"]}}, 
data_files=RequiredDataFailes, 

) 
+0

khi tôi thử tập lệnh của bạn, nó phát ra lỗi liên quan đến ngụm. không được xác định hoặc không xác định –

Các vấn đề liên quan