Как инициализировать pyQgis и новые пакеты??

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
Jasen
Активный участник
Сообщения: 100
Зарегистрирован: 27 янв 2006, 18:33
Репутация: 4
Ваше звание: Специалист
Откуда: Москва
Контактная информация:

Как инициализировать pyQgis и новые пакеты??

Сообщение Jasen » 31 июл 2018, 16:57

Пожалуйста, те кто пользуется регулярно, напишите ещё раз:
1. Как настроить консоль, чтобы можно было вызывать уже установленные плагины
from qgis.core import *
import qgis.utils
дальше путь прописать надо? где?

2. Если я хочу использовать новый пакет, к примеру whitebox_tools.py, куда его надо поместить и как установить?

Все что начинается с from package import ... такая элементарщина, почему никак не получается настроить пакет? Ещё пишут, что нужно добавить файл __init__.py, так надо или нет? В командной строке замечательно работаю со всеми этими программами, но хочется переменные номально задавать хотя бы, в python это проще.
Раздражает прямо, просидел два часа сегодня опять, разбираясь с инициализацией, потому что хочется из консоли qgis работать, это удобнее.

Я на этапе Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:/PROGRA~1/QGIS2~1.18/apps/qgis-ltr/./python\qgis\utils.py", line 607, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
ImportError: No module named whitebox_tools
и очень хочу из него выйти.

В общем, большое спасибо, помогите пожалуйста раз и навсегда разобраться.
Что написал - то написал!

Dmitry Stasev
Участник
Сообщения: 67
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 22
Откуда: MO

Re: Как инициализировать pyQgis и новые пакеты??

Сообщение Dmitry Stasev » 31 июл 2018, 21:45

Привет, я не гуру (сам недавно изучаю), но посмотреть могу :wink:
- Каким инсталлятором был установлен и как сейчас запускается сам QGIS
Я к чему веду.. если он не видит
from qgis.core import *
import qgis.utils
то похоже в Path нет путей к библиотекам.

Я запускаю QGIS с батника ..\QGIS218\bin\qgis-ltr.bat
откуда, как понимаю, тянутся все нужные пути
@echo off
call "%~dp0\o4w_env.bat"
@echo off
path %OSGEO4W_ROOT%\apps\qgis-ltr\bin;%PATH%
set QGIS_PREFIX_PATH=%OSGEO4W_ROOT:\=/%/apps/qgis-ltr
set GDAL_FILENAME_IS_UTF8=YES
rem Set VSI cache to be used as buffer, see #6448
set VSI_CACHE=TRUE
set VSI_CACHE_SIZE=1000000
set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\qgis-ltr\qtplugins;%OSGEO4W_ROOT%\apps\qt4\plugins
start "QGIS" /B "%OSGEO4W_ROOT%"\bin\qgis-ltr-bin.exe %*
Что касается установки модулей, то тут надо подходить индивидуально.
Обычно с модулем идет файл с описанием установки.
Если модуль не предназначен для установки через pip/setuptools
может быть достаточно поместить его в каталог с модулями:
системный: ..\QGIS218\apps\Python27\Lib\
или пользовательский ..\Users\...\.qgis2\python\plugins\
а можно и добавить в настройках QGIS свой путь к модулю:
4.png
4.png (23.55 КБ) 5595 просмотров
Если где ошибся, поправьте.

Аватара пользователя
Jasen
Активный участник
Сообщения: 100
Зарегистрирован: 27 янв 2006, 18:33
Репутация: 4
Ваше звание: Специалист
Откуда: Москва
Контактная информация:

Re: Как инициализировать pyQgis и новые пакеты??

Сообщение Jasen » 01 авг 2018, 10:45

Спасибо!
Извините, я поскольку вчера был сердит, написал сумбурно.

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

from qgis.core import *
import qgis.utils
Это у меня проходит. У меня не получается вызвать import ни тех модулей, что предустановлены (может быть, не верно формулирую название модуля, например from GdalTools import ) ни новых. Кстати, whitebox попытался установить по принципу

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

from subprocess import call
call(['python', r'C:\Users\jasinskiy\Downloads\whitebox-tools-master\whitebox_tools.py'])
и он мне выдал 0, то есть успех. Но это не помогло далее его вызвать. :)
Что написал - то написал!

Dmitry Stasev
Участник
Сообщения: 67
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 22
Откуда: MO

Re: Как инициализировать pyQgis и новые пакеты??

Сообщение Dmitry Stasev » 01 авг 2018, 14:06

Скачал whitebox-tools https://github.com/jblindsay/whitebox-tools
сделал следующее:
- скопировал папку whitebox-tools-master в ..\QGIS218\apps\Python27\Lib\
- ПЕРЕИМЕНОВАЛ ее в whiteboxtools (дефисы-зло)
- Чтобы пайтон воспринимал папку, как пакет, добавил в эту папку пустой файл с именем __init__.py
Должно заработать, у меня импорт прошел.

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

from whiteboxtools import whitebox_tools
тут whiteboxtools - это имя папки, whitebox_tools - whitebox_tools.py
Как будет работать не знаю, т.к.
WhiteboxTools is a stand-alone executable command-line program with no actual installation. If you intend to use the Python programming interface for WhiteboxTools you will need to have Python 3 (or higher) installed.

Аватара пользователя
Jasen
Активный участник
Сообщения: 100
Зарегистрирован: 27 янв 2006, 18:33
Репутация: 4
Ваше звание: Специалист
Откуда: Москва
Контактная информация:

Re: Как инициализировать pyQgis и новые пакеты??

Сообщение Jasen » 02 авг 2018, 16:34

Немного продвинулся.

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

from qgis.core import *
import qgis.utils
from whitebox_tools import whitebox_tools as wbt
wbtools = wbt.WhiteboxTools
wbt.work_dir="C:\Users\jasinskiy\Documents\MODELLING\gis_data\WHITEBOX_MOZH"
wbtools.average_flowpath_slope ("dem_filled.tas", "output_slope.tas")
И вот последнее ругается. При help(wbtools.average_flowpath_slope) пишет, что нужен self.
И дальше следующее происходит:

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

wbtools.average_flowpath_slope ("dem_filled.tas", "output_slope.tas")
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: unbound method average_flowpath_slope() must be called with WhiteboxTools instance as first argument (got str instance instead)
help (wbtools.average_flowpath_slope)
Help on method average_flowpath_slope in module whitebox_tools.whitebox_tools:

average_flowpath_slope(self, dem, output, callback=<function default_callback>) unbound whitebox_tools.whitebox_tools.WhiteboxTools method
    Measures the average slope gradient from each grid cell to all upslope divide cells.
    
    Keyword arguments:
    
    dem -- Input raster DEM file. 
    output -- Output raster file. 
    callback -- Custom functon for handling tool text outputs.

wbtools.average_flowpath_slope (self, "dem_filled.tas", "output_slope.tas")
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'self' is not defined
wbtools.average_flowpath_slope (self)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'self' is not defined
Что написал - то написал!

Аватара пользователя
Эдуард Казаков
Гуру
Сообщения: 546
Зарегистрирован: 23 апр 2014, 17:11
Репутация: 532
Откуда: Planet Earth
Контактная информация:

Re: Как инициализировать pyQgis и новые пакеты??

Сообщение Эдуард Казаков » 02 авг 2018, 17:29

Попробуйте скобочки поставить при инициализации
wbtools = wbt.WhiteboxTools()

Аватара пользователя
Jasen
Активный участник
Сообщения: 100
Зарегистрирован: 27 янв 2006, 18:33
Репутация: 4
Ваше звание: Специалист
Откуда: Москва
Контактная информация:

Re: Как инициализировать pyQgis и новые пакеты??

Сообщение Jasen » 02 авг 2018, 17:48

Эдуард Казаков писал(а):
02 авг 2018, 17:29
Попробуйте скобочки поставить при инициализации
wbtools = wbt.WhiteboxTools()

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

wbtools = wbt.WhiteboxTools ()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\whitebox_tools\whitebox_tools.py", line 57, in __init__
    self.exe_path = os.path.dirname(shutil.which(
AttributeError: 'module' object has no attribute 'which'
Что написал - то написал!

Dmitry Stasev
Участник
Сообщения: 67
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 22
Откуда: MO

Re: Как инициализировать pyQgis и новые пакеты??

Сообщение Dmitry Stasev » 03 авг 2018, 12:30

Jasen писал(а):
02 авг 2018, 17:48
Python27
нет в нем shutil.which
Dmitry Stasev писал(а):
01 авг 2018, 14:06
need to have Python 3 (or higher) installed

Dmitry Stasev
Участник
Сообщения: 67
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 22
Откуда: MO

Re: Как инициализировать pyQgis и новые пакеты??

Сообщение Dmitry Stasev » 03 авг 2018, 13:11

Jasen, если не пугает поправить исходник (правда, может еще где грабли будут)
Отредактируйте в whitebox_tools.py конструктор класса (закомментируйте 2 строчки), только потом перезапустите QGIS

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

class WhiteboxTools(object):
    ''' 
    An object for interfacing with the WhiteboxTools executable.
    '''

    def __init__(self):
        if platform.system() == 'Windows':
            self.ext = '.exe'
        else:
            self.ext = ''
        self.exe_name = "whitebox_tools{}".format(self.ext)
#        self.exe_path = os.path.dirname(shutil.which(
#            self.exe_name) or path.dirname(path.abspath(__file__)))
        self.work_dir = ""
        self.verbose = True
        self.cancel_op = False 
А путь укажите сами уже у себя в скрипте

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

from whitebox_tools import whitebox_tools

wbtools = whitebox_tools.WhiteboxTools()

#путь к папке с екзешником
wbtools.set_whitebox_dir = u'C:\\...'
#путь к рабочей папке
wbtools.set_working_dir= u'C:\\...'

Аватара пользователя
Jasen
Активный участник
Сообщения: 100
Зарегистрирован: 27 янв 2006, 18:33
Репутация: 4
Ваше звание: Специалист
Откуда: Москва
Контактная информация:

Re: Как инициализировать pyQgis и новые пакеты??

Сообщение Jasen » 04 авг 2018, 14:56

Да, спасибо! Он по крайней мере понял меня.

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

wbtools.exe_path ='C:\WBT'
wbtools.work_dir= 'C:\Users\jasinskiy\Documents\MODELLING\gis_data\mozhajskiy_saga'
wbtools.average_flowpath_slope ('dem_filled.tif', 'output_slope.tif')
.\whitebox_tools.exe --run="AverageFlowpathSlope" --wd="C:\Users\jasinskiy\Documents\MODELLING\gis_data\mozhajskiy_saga" --dem='dem_filled.tif' --output='output_slope.tif' -v

[Error 6] 
1
unicode указывать не нужно перед путями (u это же unicode?) имена из файла: work_dir и exe_path.
Кстати, никто не знает, где смотрится лог ошибок и вообще, как их по номерам находить?
Что написал - то написал!

Dmitry Stasev
Участник
Сообщения: 67
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 22
Откуда: MO

Re: Как инициализировать pyQgis и новые пакеты??

Сообщение Dmitry Stasev » 06 авг 2018, 10:17

Jasen, А Вы не хотите под эту задачу попробовать QGIS 3 поставить рядышком, может там все заработает без бубна?

Аватара пользователя
Jasen
Активный участник
Сообщения: 100
Зарегистрирован: 27 янв 2006, 18:33
Репутация: 4
Ваше звание: Специалист
Откуда: Москва
Контактная информация:

Re: Как инициализировать pyQgis и новые пакеты??

Сообщение Jasen » 08 авг 2018, 11:54

Нет, это ещё хуже вышло )

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

wbtools.work_dir= "C:\Users\jasinskiy\Documents\MODELLING\gis_data\mozhajskiy_saga"
Traceback (most recent call last):
  File "C:\PROGRA~1\QGIS3~1.2\apps\Python36\lib\code.py", line 64, in runsource
    code = self.compile(source, filename, symbol)
  File "C:\PROGRA~1\QGIS3~1.2\apps\Python36\lib\codeop.py", line 168, in __call__
    return _maybe_compile(self.compiler, source, filename, symbol)
  File "C:\PROGRA~1\QGIS3~1.2\apps\Python36\lib\codeop.py", line 99, in _maybe_compile
    raise err1
  File "C:\PROGRA~1\QGIS3~1.2\apps\Python36\lib\codeop.py", line 87, in _maybe_compile
    code1 = compiler(source + "\n", filename, symbol)
  File "C:\PROGRA~1\QGIS3~1.2\apps\Python36\lib\codeop.py", line 133, in __call__
    codeob = compile(source, filename, symbol, self.flags, 1)
  File "<input>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
А в папке 2-го Питона он вообще этот модуль не видит. Видимо по умолчанию в версии 3.2 загружается 3-й.
Попробовал без закомментирования shutil, но не работает. Пришлось опять закомментировать.
Что написал - то написал!

Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 8 гостей