Моя команда решила сохранить иерархическую структуру. Плагин теперь работает в QGIS, с той же иерархической структурой, используя относительный импорт. (пока) зависят от любых аспектов QGIS. При относительном импорте это полностью сломано.
Код: Выделить всё
.
├── app
│ └── main.py
├── __init__.py
├── justfile
├── metadata.txt
├── plugin.py
├── README.md
├── resources
│ ├── name_resolver.py
│ └── response_codes.py
├── processing
│ ├── B_processor.py
│ ├── A_processor.py
│ ├── processor_core.py
│ ├── processor_interface.py
│ ├── processor_query_ui.py
│ └── processor_query_ui.ui
└── tests
├── __init__.py
├── test_A_processor.py
└── test_processor_core.py
Код: Выделить всё
app/main.py
Код: Выделить всё
if __name__ == "__main__":
import sys
from PyQt5 import QtWidgets
from processing.processor_query_ui import UI_DataFinderUI
app = QtWidgets.QApplication(sys.argv)
ui = UI_DataFinderUI()
ui.show()
sys.exit(app.exec_())
Код: Выделить всё
$ python app/main.py
< /code>
Что не работает, это последующие импорты: < /p>
Traceback (most recent call last):
File "/path/to/app/main.py", line 4, in
from processing.processor_query_ui import UI_DataFinderUI
File "/path/to/processing/processor_query_ui.py", line 2, in
from .A_processor import Aprocessor
File "/path/to/processing/A_processor.py", line 5, in
from ..resources.response_codes import RESPONSE_CODES
ImportError: attempted relative import beyond top-level package
Код: Выделить всё
app,resources,processing}/__init__.py
Чтобы pytest работал, каталог тестов должен содержать файл init.py; тогда pytest работает либо как pytest, либо как python -m pytest.
Моя цель — иметь возможность запускать графический интерфейс в файлеprocessor_query_ui.py как отдельное приложение, написав какой-то адаптер, чтобы мне не приходилось изменять текущую структуру каталогов или относительный импорт (что, как указано выше, делает QGIS счастливым).
Любой совет очень ценится.
Подробнее здесь: https://stackoverflow.com/questions/793 ... gis-plugin