Адаптер Python для работы с относительным импортом в моем плагине QGIS?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Адаптер Python для работы с относительным импортом в моем плагине QGIS?

Сообщение Anonymous »

Я пишу плагин QGIS. Во время ранней разработки я написал и проверил приложение QT GUI независимо от QGIS. Я использовал абсолютный импорт, и все работало нормально. Я не могу объяснить, почему и не смог найти какую -либо вспомогательную документацию, но, тем не менее,: очевидно, QGIS нуждается или решительно предпочитает относительный импорт. Большинство других плагинов, которые я смотрел (конечно, полностью анекдотично) использовали плоский каталог плагинов и относительный импорт. < /P>
Моя команда решила сохранить иерархическую структуру. Плагин теперь работает в 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 — это место, где я пытаюсь запустить графический интерфейс независимо от QGIS. Графический интерфейс находится в обработке/processor_query_ui.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_())
При запуске main с верхнего уровня весь импорт в main.py работает:

Код: Выделить всё

$ 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
Это показывает, что все импорты в main.py работают правильно. Но когда процесс процессора_Кери_уи пытается сделать это импорт, эти не проходят. /code> файлы и все каталоги первого уровня также (например, {

Код: Выделить всё

app,resources,processing}/__init__.py
) безрезультатно. Запуск python -m app/main{.py не работает, хотя я этого и не ожидал.
Чтобы pytest работал, каталог тестов должен содержать файл init.py; тогда pytest работает либо как pytest, либо как python -m pytest.
Моя цель — иметь возможность запускать графический интерфейс в файлеprocessor_query_ui.py как отдельное приложение, написав какой-то адаптер, чтобы мне не приходилось изменять текущую структуру каталогов или относительный импорт (что, как указано выше, делает QGIS счастливым).
Любой совет очень ценится.

Подробнее здесь: https://stackoverflow.com/questions/793 ... gis-plugin
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»