Как инициализировать pyQgis и новые пакеты??
- Jasen
- Активный участник
- Сообщения: 100
- Зарегистрирован: 27 янв 2006, 18:33
- Репутация: 4
- Ваше звание: Специалист
- Откуда: Москва
- Контактная информация:
Как инициализировать pyQgis и новые пакеты??
Пожалуйста, те кто пользуется регулярно, напишите ещё раз:
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
и очень хочу из него выйти.
В общем, большое спасибо, помогите пожалуйста раз и навсегда разобраться.
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
и очень хочу из него выйти.
В общем, большое спасибо, помогите пожалуйста раз и навсегда разобраться.
Что написал - то написал!
-
- Участник
- Сообщения: 67
- Зарегистрирован: 13 мар 2018, 08:59
- Репутация: 22
- Откуда: MO
Re: Как инициализировать pyQgis и новые пакеты??
Привет, я не гуру (сам недавно изучаю), но посмотреть могу
- Каким инсталлятором был установлен и как сейчас запускается сам QGIS
Я к чему веду.. если он не видит
Я запускаю QGIS с батника ..\QGIS218\bin\qgis-ltr.bat
откуда, как понимаю, тянутся все нужные пути
Обычно с модулем идет файл с описанием установки.
Если модуль не предназначен для установки через pip/setuptools
может быть достаточно поместить его в каталог с модулями:
системный: ..\QGIS218\apps\Python27\Lib\
или пользовательский ..\Users\...\.qgis2\python\plugins\
а можно и добавить в настройках QGIS свой путь к модулю: Если где ошибся, поправьте.
- Каким инсталлятором был установлен и как сейчас запускается сам QGIS
Я к чему веду.. если он не видит
то похоже в Path нет путей к библиотекам.from qgis.core import *
import qgis.utils
Я запускаю 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 свой путь к модулю: Если где ошибся, поправьте.
- Jasen
- Активный участник
- Сообщения: 100
- Зарегистрирован: 27 янв 2006, 18:33
- Репутация: 4
- Ваше звание: Специалист
- Откуда: Москва
- Контактная информация:
Re: Как инициализировать pyQgis и новые пакеты??
Спасибо!
Извините, я поскольку вчера был сердит, написал сумбурно.
Это у меня проходит. У меня не получается вызвать import ни тех модулей, что предустановлены (может быть, не верно формулирую название модуля, например from GdalTools import ) ни новых. Кстати, whitebox попытался установить по принципу
и он мне выдал 0, то есть успех. Но это не помогло далее его вызвать.
Извините, я поскольку вчера был сердит, написал сумбурно.
Код: Выделить всё
from qgis.core import *
import qgis.utils
Код: Выделить всё
from subprocess import call
call(['python', r'C:\Users\jasinskiy\Downloads\whitebox-tools-master\whitebox_tools.py'])
Что написал - то написал!
-
- Участник
- Сообщения: 67
- Зарегистрирован: 13 мар 2018, 08:59
- Репутация: 22
- Откуда: MO
Re: Как инициализировать pyQgis и новые пакеты??
Скачал whitebox-tools https://github.com/jblindsay/whitebox-tools
сделал следующее:
- скопировал папку whitebox-tools-master в ..\QGIS218\apps\Python27\Lib\
- ПЕРЕИМЕНОВАЛ ее в whiteboxtools (дефисы-зло)
- Чтобы пайтон воспринимал папку, как пакет, добавил в эту папку пустой файл с именем __init__.py
Должно заработать, у меня импорт прошел.
тут whiteboxtools - это имя папки, whitebox_tools - whitebox_tools.py
Как будет работать не знаю, т.к.
сделал следующее:
- скопировал папку whitebox-tools-master в ..\QGIS218\apps\Python27\Lib\
- ПЕРЕИМЕНОВАЛ ее в whiteboxtools (дефисы-зло)
- Чтобы пайтон воспринимал папку, как пакет, добавил в эту папку пустой файл с именем __init__.py
Должно заработать, у меня импорт прошел.
Код: Выделить всё
from whiteboxtools import whitebox_tools
Как будет работать не знаю, т.к.
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 и новые пакеты??
Немного продвинулся.
И вот последнее ругается. При help(wbtools.average_flowpath_slope) пишет, что нужен self.
И дальше следующее происходит:
Код: Выделить всё
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")
И дальше следующее происходит:
Код: Выделить всё
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 и новые пакеты??
Попробуйте скобочки поставить при инициализации
wbtools = wbt.WhiteboxTools()
wbtools = wbt.WhiteboxTools()
- Jasen
- Активный участник
- Сообщения: 100
- Зарегистрирован: 27 янв 2006, 18:33
- Репутация: 4
- Ваше звание: Специалист
- Откуда: Москва
- Контактная информация:
Re: Как инициализировать pyQgis и новые пакеты??
Эдуард Казаков писал(а): ↑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'
Что написал - то написал!
-
- Участник
- Сообщения: 67
- Зарегистрирован: 13 мар 2018, 08:59
- Репутация: 22
- Откуда: MO
Re: Как инициализировать pyQgis и новые пакеты??
нет в нем shutil.which
-
- Участник
- Сообщения: 67
- Зарегистрирован: 13 мар 2018, 08:59
- Репутация: 22
- Откуда: MO
Re: Как инициализировать pyQgis и новые пакеты??
Jasen, если не пугает поправить исходник (правда, может еще где грабли будут)
Отредактируйте в whitebox_tools.py конструктор класса (закомментируйте 2 строчки), только потом перезапустите QGIS
А путь укажите сами уже у себя в скрипте
Отредактируйте в 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 и новые пакеты??
Да, спасибо! Он по крайней мере понял меня.
unicode указывать не нужно перед путями (u это же unicode?) имена из файла: work_dir и exe_path.
Кстати, никто не знает, где смотрится лог ошибок и вообще, как их по номерам находить?
Код: Выделить всё
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
Кстати, никто не знает, где смотрится лог ошибок и вообще, как их по номерам находить?
Что написал - то написал!
-
- Участник
- Сообщения: 67
- Зарегистрирован: 13 мар 2018, 08:59
- Репутация: 22
- Откуда: MO
Re: Как инициализировать pyQgis и новые пакеты??
Jasen, А Вы не хотите под эту задачу попробовать QGIS 3 поставить рядышком, может там все заработает без бубна?
- Jasen
- Активный участник
- Сообщения: 100
- Зарегистрирован: 27 янв 2006, 18:33
- Репутация: 4
- Ваше звание: Специалист
- Откуда: Москва
- Контактная информация:
Re: Как инициализировать pyQgis и новые пакеты??
Нет, это ещё хуже вышло )
А в папке 2-го Питона он вообще этот модуль не видит. Видимо по умолчанию в версии 3.2 загружается 3-й.
Попробовал без закомментирования shutil, но не работает. Пришлось опять закомментировать.
Код: Выделить всё
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
Попробовал без закомментирования shutil, но не работает. Пришлось опять закомментировать.
Что написал - то написал!
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей