Chỉ cần tóm tắt các tùy chọn ở đây khi tôi sử dụng chúng.
PyInstaller TOC của - là, như các tài liệu nói:
Một TOC dường như là một danh sách các hàng của mẫu (tên, đường dẫn, typecode). Trong thực tế, đó là một bộ theo thứ tự, không phải là một danh sách. TOC không chứa bản sao, trong đó tính duy nhất chỉ dựa trên tên.
Trong otherwords, chỉ cần:
a_toc = [('uname1','/path/info','BINARY'),('uname2','/path/to','EXTENSION')...]
Vì vậy, trong tập tin .spec của bạn - một khi bạn đã có những kết quả phân tích của kịch bản - bạn có thể sau đó tiếp tục thay đổi tương ứng TOC bằng một trong hai:
(* Là một sang một bên, cho sự khác biệt để làm việc có vẻ như bạn dứt khoát phải ép TOC()
và lưu ý rằng kể từ khi nó chỉ là tên mà duy nhất xác định các yếu tố của bộ này, bạn chỉ cần xác định rằng - do đó ('sqlite3', None, None)
, v.v.)
Ví dụ minh họa (lấy từ tệp .spec) ở bên dưới - cho tốt hơn hoặc tệ hơn - tôi xóa tất cả các tham chiếu đến scipy, IPython và zmq; xóa cụ thể sqlite, tcl/tk và ssl .DLL's; chèn một opencv còn thiếu .DLL; và cuối cùng xóa tất cả các thư mục dữ liệu được tìm thấy ngoài các thư mục matplotlib ...
Cho dù Pyinstaller .exe có kết quả sau đó sẽ hoạt động khi tệp .pyc cố gắng tải dự kiến hay không.DLL là moot :-/
# Manually remove entire packages...
a.binaries = [x for x in a.binaries if not x[0].startswith("scipy")]
a.binaries = [x for x in a.binaries if not x[0].startswith("IPython")]
a.binaries = [x for x in a.binaries if not x[0].startswith("zmq")]
# Target remove specific ones...
a.binaries = a.binaries - TOC([
('sqlite3.dll', None, None),
('tcl85.dll', None, None),
('tk85.dll', None, None),
('_sqlite3', None, None),
('_ssl', None, None),
('_tkinter', None, None)])
# Add a single missing dll...
a.binaries = a.binaries + [
('opencv_ffmpeg245_64.dll', 'C:\\Python27\\opencv_ffmpeg245_64.dll', 'BINARY')]
# Delete everything bar matplotlib data...
a.datas = [x for x in a.datas if
os.path.dirname(x[1]).startswith("C:\\Python27\\Lib\\site-packages\\matplotlib")]