2008-11-20 31 views
5

cách tạo một công cụ plugin tốt cho các tệp thực thi độc lập được tạo bằng pyInstaller, py2exe hoặc các công cụ tương tự?Tạo các plugin cho các tập tin thực thi độc lập python

Tôi không có kinh nghiệm với py2exe, nhưng pyInstaller sử dụng móc nhập để nhập gói từ kho nén của nó. Tất nhiên tôi có thể nhập động một kho lưu trữ nén khác được tạo bằng pyInstaller và thực thi mã - đây có thể là một công cụ plugin đơn giản.

Sự cố xuất hiện khi plugin (thứ này được nhập động) sử dụng thư viện không có trong kho gốc (không bao giờ được nhập). Điều này là do nhập khẩu móc là cho các ứng dụng ban đầu và tìm kiếm các gói trong kho gốc - không phải là một trong những nhập khẩu sau này (plugin gói kho lưu trữ).

Có cách nào dễ dàng để giải quyết vấn đề này không? Có lẽ có tồn tại động cơ như vậy?

Trả lời

3

Khi biên dịch thành exe, bạn sẽ gặp phải vấn đề này.

Tùy chọn duy nhất tôi có thể nghĩ để cho phép người dùng truy cập bằng các plugin của họ để sử dụng bất kỳ thư viện python nào là bao gồm tất cả các thư viện trong gói exe.

Có thể là một ý tưởng tốt để giới hạn các thư viện được hỗ trợ vào một tập hợp con và liệt kê nó trong tài liệu của bạn. Tùy thuộc vào bạn.

Tôi chỉ sử dụng py2exe.

Trong py2exe, bạn có thể chỉ định các thư viện không được tìm thấy trong tìm kiếm trong tệp setup.py.

Dưới đây là một ví dụ:.

from distutils.core import setup 
import py2exe 

setup (name = "script2compile", 
     console=['script2compile.pyw'], 
     version = "1.4", 
     author = "me", 
     author_email="[email protected]", 
     url="myurl.com", 
     windows = [{ 
        "script":"script2compile.pyw", 
        "icon_resources":[(1,"./ICONS/app.ico")] # Icon file to use for display 
       }], 
     # put packages/libraries to include in the "packages" list 
     options = {"py2exe":{"packages": [ "pickle", 
              "csv", 
              "Tkconstants", 
              "Tkinter", 
              "tkFileDialog", 
              "pyexpat", 
              "xml.dom.minidom", 
              "win32pdh", 
              "win32pdhutil", 
              "win32api", 
              "win32con", 
              "subprocess", 
             ]}} 

     ) 

import win32pdh 
import win32pdhutil 
import win32api 
1

PyInstaller không có một hệ thống plugin cho xử lý hàng nhập khẩu ẩn, và tàu với một số trong những người đã có trong Xem trang web (http://www.pyinstaller.org) mà nói:

Mục tiêu chính của PyInstaller là tương thích với các gói của bên thứ ba ngoài hộp. Điều này có nghĩa rằng, với PyInstaller, tất cả các thủ thuật cần thiết để làm cho các gói bên ngoài hoạt động đã được tích hợp trong PyInstaller để không có sự can thiệp của người dùng. Bạn sẽ không bao giờ được yêu cầu tìm kiếm các thủ thuật trong wiki và áp dụng sửa đổi tùy chỉnh cho tệp của bạn hoặc tập lệnh thiết lập của bạn. Kiểm tra danh sách tương thích của chúng tôi về SupportedPackages.

+0

Tôi đã suy nghĩ về hệ thống plugin cho ứng dụng độc lập của mình. Tôi có ứng dụng được tạo bằng pyInstaller. Tôi muốn tạo plugin cho ứng dụng này. Vấn đề là khi plugin nhập khẩu một cái gì đó mà không được nhập khẩu trong ứng dụng gốc - nhập thất bại. – uhz

+0

Vì vậy, thường thì tốt nhất là nếu: - các plugin không chứa các mô-đun đã có trong ứng dụng nhị phân - plugins chứa các mô-đun không có trong ứng dụng - nhập lần đầu tiên nhập từ ứng dụng chính, nếu không thành công từ mô-đun plugin – uhz

+0

Đó chính xác là những gì PyInstaller làm. Bạn đã thử chưa? –

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