#python #pyqt5 #executable #cx-freeze
#python #pyqt5 #исполняемый файл #cx-freeze
Вопрос:
Я использовал PyQt5 для разработки программного обеспечения с использованием python. теперь у меня есть main.ui и main.py я использовал эту командную строку для чтения файла main.ui:
FORM_CLASS,_=loadUiType(path.join(path.dirname(__file__),"main.ui"))
теперь мой main.ui подключен к моему main.py файл, в котором написан основной код python.
Я также создал setup.py согласно инструкции cx_freeze
Затем я использовал команду cmd:
python setup.py build_exe
после завершения я получил приведенную ниже ошибку:
No such file or directory:'main.ui'
итак, могу ли я решить эту проблему?
Ответ №1:
Если вы собираетесь использовать внешние ресурсы, то вам следует использовать руководство cx_freeze для файлов данных:
Использование файлов данных Приложениям часто помимо кода требуются файлы данных, такие как значки. Используя сценарий установки, вы можете перечислить файлы данных или каталоги в параметре include_files для build_exe. Они будут скопированы в каталог сборки вместе с исполняемым файлом. Затем, чтобы найти их, используйте код, подобный этому:
def find_data_file(filename): if getattr(sys, 'frozen', False): # The application is frozen datadir = os.path.dirname(sys.executable) else: # The application is not frozen # Change this bit to match where you store your data files: datadir = os.path.dirname(__file__) return os.path.join(datadir, filename)
Альтернативой является встраивание данных в код, например, с помощью Qt
система ресурсов.
Итак, в вашем случае измените свой код на:
import os.path
import sys
# ...
def find_data_file(filename):
if getattr(sys, 'frozen', False):
# The application is frozen
datadir = os.path.dirname(sys.executable)
else:
# The application is not frozen
# Change this bit to match where you store your data files:
datadir = os.path.dirname(__file__)
return os.path.join(datadir, filename)
# ...
FORM_CLASS,_=loadUiType(find_data_file("main.ui"))
# ...
И измените setup.py чтобы включить .ui:
from cx_Freeze import setup, Executable
setup(
name="mytest",
version="0.1",
description="",
options={"build_exe": {"include_files": "main.ui"}},
executables=[Executable("main.py")],
)
Комментарии:
1. Большое спасибо, брат, у меня это работает, используя твой метод, оценил ..