2017-12-02 25 views
8

Giả sử tôi có ba tập lệnh. Main.py (có tất cả nhập khẩu), 1.py (kịch bản ngẫu nhiên), 2.py (kịch bản ngẫu nhiên).Nhập các mô-đun Python từ một vị trí được chọn

pyinstaller -F --onedir Main.py (80mb) 
pyinstaller -F --onedir 1.py (80mb) 
pyinstaller -F --onedir 2.py (80mb) 

Điều này tạo ra 3 thư mục tôi sau đó sao chép 1.exe và 2.exe vào thư mục chính với tất cả các phụ thuộc và điều này hoạt động tốt.

image

Hai vấn đề được trình bày:

Vấn đề là kích thước. Một tệp làm giảm điều này xuống 30mb, một thư mục giữ nó ở mức 80mb

Quan trọng hơn, exe không thể rời khỏi thư mục đó. Tôi đã phải sử dụng các phím tắt bằng Python.

Tôi đang theo dõi this, được cho là giải pháp thay thế.

Câu hỏi của tôi là, làm thế nào tôi có thể đọc các mục nhập từ một vị trí được chọn bằng pyinstaller để tôi có thể di chuyển các tệp thi hành?

Logic: Compile Main.py sử dụng pyinstaller -F –onefile Main.py (15mb).

Tạo thư mục tại C:\13\ vẻ rất exe như C:\13\Main.exe

liên kết tất cả các exe tại C:\13? với --runtime-tmpdir PATH

Tôi đang cố gắng tìm tài liệu về việc nhập khẩu từ bên trong thư mục exe hoặc thậm chí "one dir". Có rất nhiều về việc nhập khẩu từ khi bắt đầu, nhưng không nhiều vào việc nhập khẩu từ một vị trí được chọn để tôi có thể chạy exe ở bất cứ đâu. Hơn nữa, rất khó để tìm thấy các mô-đun trong pyinstaller ngắn của decompiling nó thêm vào sự nhầm lẫn này.

Có lẽ ...

pyinstaller -F --runtime-tmpdir C:\13 --onefile 2.py 

pyinstaller -F --runtime-tmpdir C:\13 --onedir 3.py 

Mặc dù đối với tôi không có thư mục được tạo ra. Làm thế nào để tôi đi về việc nhập khẩu từ một địa điểm được chọn.

Một thể solution:

if getattr(sys, 'frozen', False): 
     os.path.join(sys._MEIPASS, "C:\aa") 

Mặc dù như bạn có thể nhìn thấy trong image, nó cho phép nói rằng chúng tôi muốn gấu trúc có một vài tác phẩm để lựa chọn ...

+0

Tài liệu từ pyinstaller có chương chi tiết về cách đóng gói nhiều exe chia sẻ cùng một phụ thuộc: https://pyinstaller.readthedocs.io/en/stable/spec-files.html#multipackage-bundles –

+0

@FlorentB. "Tính năng này bị hỏng trong bản phát hành PyInstaller 3.0" –

Trả lời

0

tôi đã có vấn đề tương tự với PyInstaller khi họ chuyển sang phiên bản 3.0 và Nuitka giải quyết nó cho tôi.

Bạn có thể nhóm Main.py thành tệp .pyd lib và sau đó tạo tệp thi hành cho 1.py2.py để nhập tất cả các gói cần thiết từ "dll" này. Do đó bạn có thể đặt tệp lib của mình vào một vị trí cụ thể và đặt PYTHONPATH cho phù hợp trước khi khởi chạy các tệp thi hành của bạn (ví dụ: trong tệp lô hoặc trực tiếp trong cấu hình trình bao của bạn).

+0

Tôi đã sử dụng Nuitka trong quá khứ, và nó đã rất khó hiểu và lỗi để thiết lập. Tôi đã trải qua một ngày trải qua một loạt các lỗi thiết lập vô tận mà không phải là tài liệu nhỏ và thú vị về các vấn đề. Nếu bạn có thể cung cấp một hướng dẫn sâu hơn, tôi cảm thấy như những người khác có thể được hưởng lợi từ điều này mặc dù. Trái tim tôi được thiết lập khá tốt trên Pyinstaller vì nó có tài liệu tuyệt vời + hỗ trợ, vì vậy chỉ cần sử dụng "Nuitka" có thể không hữu ích xD –

0

tôi đã điều tra này hơn nữa, và tin rằng giải pháp được trình bày here là câu trả lời tôi sau

Sử dụng onefile là không thể như tính năng này được hiện nay bị phá vỡ.

Để giải quyết mối quan tâm đầu tiên của tôi, UPX và thư mục ảo. Sau đó, cuối cùng, đặt tất cả các tập tin vào một thư mục. Cuối cùng, đặt các exe trong thư mục như tôi đã làm trong hình ảnh sẽ có nghĩa là tôi có một tập tin bị giảm.

Tôi có thể tạo phím tắt thông qua tập lệnh python (nếu vẫn là mối quan tâm), tuy nhiên không có nhu cầu thực sự và chạy tất cả exe trong một thư mục đó là tốt hơn tôi. Họ có thể sửa chữa các onefile trong tương lai, nhưng tôi hài lòng hơn với giải pháp này.

Kết quả là: Tệp nhỏ hơn.

Tôi có thể chạy các exe này ở nơi nào tôi muốn trên máy tính đó không? Đáng buồn thay, không phải không có các gói đa gói bị hỏng. Bạn có thể tạo ra một phím tắt mặc dù đó không phải là xấu như tôi nghĩ nó được. Mặc dù họ có thể sửa chữa điều đó trong tương lai nhưng trong thời gian đó giải pháp này là tốt như nó sẽ nhận được. Vui lòng sửa tôi nếu tôi sai, nhưng tôi hài lòng với giải pháp này.

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