2016-06-17 21 views
7

Tôi đang cố gắng xuất tập lệnh .py sang .exe bằng PyInstaller, có phụ thuộc vào tệp .ui được tạo bằng Qt Designer.PyInstaller + UI Files - FileNotFoundError: [Errno 2] Không có tập tin hoặc thư mục như vậy:

Tôi có thể xác nhận rằng tập lệnh .py của tôi hoạt động tốt khi chạy qua PyCharm - Tôi có thể xem GUI tôi đã tạo bằng tệp .ui.

Tuy nhiên, khi tôi xuất kịch bản py tôi để exe và khởi động nó, tôi nhận được các lỗi sau đây trong dòng lệnh:

C:\Users\giranm>"C:\Users\giranm\PycharmProjects\PyQt Tutorial\dist\secSearch_demo.exe" 
Traceback (most recent call last): 
    File "secSearch_demo.py", line 13, in <module> 
    File "site-packages\PyQt4\uic\__init__.py", line 208, in loadUiType 
    File "site-packages\PyQt4\uic\Compiler\compiler.py", line 140, in compileUi 
    File "site-packages\PyQt4\uic\uiparser.py", line 974, in parse 
    File "xml\etree\ElementTree.py", line 1186, in parse 
    File "xml\etree\ElementTree.py", line 587, in parse 
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\giranm\\securitySearchForm.ui' 
Failed to execute script secSearch_demo 

Đối với một số lý do, các tập tin .exe được tìm kiếm .ui tập tin trong đường dẫn - C: \ Users \ giranm \

Tuy nhiên, đã thực hiện một số nghiên cứu, tôi đã nói rằng tôi cần sử dụng os.getcwd() và đảm bảo rằng tôi có đường dẫn đầy đủ trong tập lệnh của mình . Ngay cả với mã bên dưới, tôi vẫn gặp lỗi khi cố định vị trí tệp .ui.

PyInstaller: IOError: [Errno 2] No such file or directory:

# import relevant modules etc... 

cwd = os.getcwd() 
securitySearchForm = os.path.join(cwd, "securitySearchForm.ui") 
popboxForm = os.path.join(cwd, "popbox.ui") 

Ui_MainWindow, QtBaseClass = uic.loadUiType(securitySearchForm) 
Ui_PopBox, QtSubClass = uic.loadUiType(popboxForm) 

# remainder of code below. 

Tôi biết rằng người ta có thể chuyển đổi các tập tin để py và nhập chúng vào các thói quen chính sử dụng pyuic4 .ui. Tuy nhiên, tôi sẽ thực hiện nhiều chỉnh sửa đối với các tệp .ui và do đó tôi không thể chuyển đổi chúng.

Có cách nào để sửa lỗi này để tôi có thể tạo một .exe độc ​​lập không?

Tôi khá mới sử dụng PyQT4 và PyInstaller - mọi trợ giúp sẽ được đánh giá cao!

Trả lời

7

Sau khi gãi đầu vào cuối tuần và tìm hiểu thêm về SO, tôi đã quản lý để biên dịch .exe độc ​​lập như mong đợi bằng cách sử dụng các tệp giao diện người dùng.

Đầu tiên, tôi định nghĩa hàm sau sử dụng câu trả lời này

Bundling data files with PyInstaller (--onefile)

# Define function to import external files when using PyInstaller. 
def resource_path(relative_path): 
    """ Get absolute path to resource, works for dev and for PyInstaller """ 
    try: 
     # PyInstaller creates a temp folder and stores path in _MEIPASS 
     base_path = sys._MEIPASS 
    except Exception: 
     base_path = os.path.abspath(".") 

    return os.path.join(base_path, relative_path) 

Tiếp theo, tôi nhập khẩu các tập tin .UI sử dụng chức năng này và các biến cho các lớp học theo yêu cầu.

# Import .ui forms for the GUI using function resource_path() 
securitySearchForm = resource_path("securitySearchForm.ui") 
popboxForm = resource_path("popbox.ui") 

Ui_MainWindow, QtBaseClass = uic.loadUiType(securitySearchForm) 
Ui_PopBox, QtSubClass = uic.loadUiType(popboxForm) 

Sau đó, tôi phải tạo tệp tài nguyên (.qrc) bằng Qt Designer và nhúng hình ảnh/biểu tượng bằng tệp tài nguyên này. Sau khi hoàn tất, tôi đã sử dụng pyrcc4 để chuyển đổi tệp .qrc thành tệp .py, tệp này sẽ được nhập trong tập lệnh chính.

ga

C:\Users\giranm\PycharmProjects\PyQt Tutorial>pyrcc4 -py3 resources.qrc -o resources_rc.py 

Python

import resources_rc 

Một khi tôi đã khẳng định kịch bản py chính hoạt động, sau đó tôi đã tạo ra một tập tin .spec sử dụng PyInstaller.

ga

C:\Users\giranm\PycharmProjects\PyQt Tutorial>pyi-makespec --noconsole --onefile secSearch_demo.py 

Theo hướng dẫn PyInstaller, tôi đã thêm các file dữ liệu bằng cách sửa đổi các tập tin .spec trên.

https://pythonhosted.org/PyInstaller/spec-files.html#adding-data-files

Cuối cùng, tôi sau đó biên soạn .exe bằng cách sử dụng tập tin .spec từ trên cao.

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