Мне нужен совет, как указать пути к моему QML и ресурсам (значку) в моем простом приложении QtQuick QML Python в KDE. Единственный связанный с этим вопрос, который я нашел здесь, был: Развертывание проекта Qt в Linux
Мой вопрос в другом. Моя единственная цель для развертывания моего приложения — KDE; поэтому мне не нужно связывать библиотеки Qt, и мое приложение не имеет других зависимостей. Мне нужно только развернуть мои файлы python и QML и значок приложения (png).
Еще одна проблема заключается в том, что в будущем я хочу иметь возможность предоставлять определенные обновления только через файлы QML. Я планирую выпускать, когда это необходимо, один новый файл QML без развертывания новой версии приложения.
Это наводит меня на мысль, что мне не следует использовать систему ресурсов Qt. Однако, не имея опыта работы с этой системой или с развертыванием приложений в целом, я прошу совета.
Я не хочу жестко указывать путь к моему значку и основному файлу QML в моем файле main.py при развертывании. Кроме того, следующий код не дает мне расположение ни одного из файлов моего приложения:
QCoreApplication.applicationDirPath()
Он возвращает /usr/bin
(местоположение python), которое не подходит для моего файла QML или значка приложения.
Как я могу найти свой QML и файлы ресурсов в выполняющемся методе __main__
?
Вот мой main.py:
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtGui import QIcon
if __name__ == '__main__':
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load(QUrl.fromLocalFile('view.qml'))
app.setWindowIcon(QIcon('appicon.png'))
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec_())
Вот мой вид.qml
import QtQuick.Window 2.2
import QtQuick 2.2
import QtQuick.Controls 2.14
Window {
id: root
visible: true
width: 640
height: 480
title: qsTr("Hello World")
}
Этот код работает, когда я запускаю python main.py
из локального каталога. Однако, если я разверну свои файлы python, qml и icon, скажем, на /usr/local/bin
, мне придется жестко закодировать этот путь в файле python следующим образом.
engine.load(QUrl.fromLocalFile('/usr/local/bin/view.qml'))
app.setWindowIcon(QIcon('/usr/local/bin/appicon.png'))
Я не хочу этого делать. Я ищу другие альтернативы, которые не требуют жесткого кодирования пути.
Этот вопрос не касается упаковки для конкретного дистрибутива. Предположим, я буду использовать что-то вроде "общего" метода, описанного здесь - - например, сценарий оболочки (и предполагается, что устанавливающий пользователь будет иметь права sudo).