Страница 1 из 1

как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 30 окт 2014, 12:37
Филиппов Владислав
Здравствуйте.
Объясните или покажите что почитать про правильное добавление сторонней библиотеки в мой плагин для QGIS.
Мне нужна вот эта библиотека.
Что нужно выполнить для того чтобы она была видна интерпретатору Python?
структура кода такова:
есть директория плагина, в ней есть директория с инструментами (tools), в которой есть директория с нужной библиотекой () и классы использующие эту библиотеку.

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

/
 --/tools
 --------module_use_svgwrite_class.py
 --------/svgwrite
 -------------------svgwrite_class_here.py
 --myplugin.py
в module_use_svgwrite_class.py я импортирую всё что мне нужно (from QVertex.tools.svgwrite import *) и использую

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

    def createSvgGeodata(self, path):
        canvas = Drawing(path + '/geodata.svg', profile='tiny')
        canvas.add(canvas.text('', insert=(0, 0.2), fill='black'))
        canvas.save()
Drawing из библиотки.

Но в самой библиотке:

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

from svgwrite.container import SVG, Defs
from svgwrite.elementfactory import ElementFactory
и это не нравится QGIS:

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

  File "C:/PROGRA~1/QGISCH~1/apps/qgis/./python\qgis\utils.py", line 454, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:/Users/filippov/.qgis2/python/plugins\QVertex\tools\coordcatalog.py", line 15, in 
    from QVertex.tools.svgwrite import *
  File "C:/PROGRA~1/QGISCH~1/apps/qgis/./python\qgis\utils.py", line 454, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
  File "C:/Users/filippov/.qgis2/python/plugins\QVertex\tools\svgwrite\__init__.py", line 51, in 
    from svgwrite.drawing import Drawing
  File "C:/PROGRA~1/QGISCH~1/apps/qgis/./python\qgis\utils.py", line 454, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
ImportError: No module named svgwrite.drawing
\QVertex\tools\svgwrite\ добавлена в PYTHONPATH

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 06 ноя 2014, 14:42
Филиппов Владислав
ничего другого, как добавлять библиотеку в ..\Python27\Lib\site-packages\ на целевой машине, не придумал

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 06 ноя 2014, 15:20
Ariki
Насколько я понимаю, добавлять в PYTHONPATH нужно не каталог-пакет svgwrite, а родительский каталог, в котором интерпретатор будет искать пакеты и модули.
В вашем модуле перед импортом пакета svgwrite или его модулей:

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

import os, sys
sys.path.append(os.path.dirname(__file__))

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 07 ноя 2014, 05:41
Филиппов Владислав
а как же тогда весь остальной мой код работает?

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 07 ноя 2014, 12:17
Ariki
Остальной код в этом плагине или вообще?
И вы не написали, сработало ли моё решение.

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 07 ноя 2014, 12:29
Филиппов Владислав
в этом моём плагине всё работает. добавляю либу в директорию плагина и проблемы при работе кода внутри либы, не моего кода
вот структура плагина:
Снимок.PNG
Снимок.PNG (81.4 КБ) 11608 просмотров

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 07 ноя 2014, 12:37
Ariki
И ошибки остались те же?

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 07 ноя 2014, 12:43
Филиппов Владислав
сейчас ошибок нет, т.к. либа в site-packages.
если её добавить в корень проекта или в директрию tools, то да, как и в заглавном посте:

File "C:/Users/filippov/.qgis2/python/plugins\QVertex\tools\svgwrite\__init__.py", line 51, in
from svgwrite.drawing import Drawing
File "C:/PROGRA~1/QGISCH~1/apps/qgis/./python\qgis\utils.py", line 454, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
ImportError: No module named svgwrite.drawing

строчка с импортом svgwrite.drawing это в __init__.py внутри \svgwrite\

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 07 ноя 2014, 13:08
Ariki
Я правильно понимаю, что это не ваше приложение, а QGIS сам пытается импортировать svgwrite?
В любом случае, вам нужно обеспечить, чтобы на момент, когда svgwrite импортирует свои модули, родительский для svgwrite/ каталог был в path. Иначе пакет svgwrite не сможет найти сам себя, чтобы импортировать свои модули.

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 07 ноя 2014, 13:11
Филиппов Владислав
совершенно верно! так что вперёд подтягивает QGIS - мой плагин или либу которою использует плагин?

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 07 ноя 2014, 13:25
Ariki
Казалось бы, зачем ему вообще её подтягивать? Не принимает ли он её за самостоятельный плагин? Ему же надо импортировать пакет, чтобы понять, плагин это или нет. Честно говоря, не знаю, как плагины ищутся в QGIS: только в корневом каталоге или в подкаталогах тоже?

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 07 ноя 2014, 13:28
Филиппов Владислав
есть есть желание, то можно экспериментировать https://github.com/filippov70/qVertex/tree/filippov

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 07 ноя 2014, 14:12
Ariki
У меня вроде работает. Положил svgwrite в QVertex/tools/, добавил приведённые выше 2 строчки в __init__.py пакета tools, для пробы запихнул импорт чего-то из svgwrite в coordcatalog.py. Больше у меня нигде в системе svgwrite нет.

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 07 ноя 2014, 14:13
Филиппов Владислав
дома проверю, заодно и на другой ОС :)
благодарю за помощь!

Re: как добавить сторонюю python-библиотеку в плагин QGIS

Добавлено: 09 ноя 2014, 19:48
Филиппов Владислав
да. подтверждаю, работает.
Снимок-6.png
Снимок-6.png (217.41 КБ) 11508 просмотров