Расширение геообработки с помощью модулей Python

Используя инструменты распространения Python (Python Distribution Utilities) и информацию документации Python, Модули размещения Python, наборы инструментов Python и пользовательские наборы с моделями или инструментами-скриптами могут эффективно использоваться пользователями ArcGIS через модули Python. Процесс создания и распространения наборов инструментов начинается с создания модуля Python. Модуль, который используется в этом упражнении, – foo.py.

foo.py

Пример кода для создания модуля Python foo:

import os

def hello():
    print 'Hello ' + os.getenv('username')

Чтобы модуль был корректно создан и размещен, должна иметь место особая структура директорий. Для хранения модуля foo должна быть создана директория foo. Поскольку требуется, чтобы папка с модулем foo находилась в корневой директории, создается каталог src для хранения директории foo и модуля foo. Структура папок должна быть следующей:

Требуется alt-текст

Чтобы модуль foo инициализировал и автоматически запустил код после его импорта, требуется файл __init__.py. С файлом __init__.py пользователи смогут работать с модулем foo и импортировать выбранные определения.

__init__.py

Пример кода для создания __init__.py для модуля foo:

from foo import hello

Структура папок теперь должна быть следующей:

Требуется alt-текст

С этими файлами и структурой папок модуль foo может быть импортирован командой import foo, а foo.hello() может быть вызван и запущен. Следующим шагом будет построение пакета для модуля foo, чтобы его можно было установить в папку site-packages Python с целью его удобного совместного использования. Этого можно добиться, написав скрипт setup.py.

setup.py

Пример кода для создания setup.py:

from distutils.core import setup
setup(name='foo',
    version='1.0',
    packages=['foo'],
    package_dir={'foo': 'foo'},
    )

Файл setup.py содержит имя и версию модуля и указывает утилите на директорию пакета. Файл setup.py должен быть сохранен в папку src. Здесь структура директорий должна быть следующей:

Требуется alt-текст

С такой структурой директорий должен быть создан установщик для модуля foo – путем запуска одной из указанных ниже команд из папки src, используя строку операционной системы. Этот пример создан в операционной системе Windows.

ПримечаниеПримечание:

Убедитесь, что в вашей системе указан путь к python.exe. В Windows нужно добавить C:\Python27\ArcGIS10.2 в системную переменную Path переменных среды Windows.

Windows:

python setup.py bdist_wininst

Linux:

python setup.py bdist_rpm

В Windows создаются каталоги dist и build в директории src. В директории dist создается файл foo-1.0.win32.exe. Это выполняемый файл, используемый для установки модуля foo в директорию site-packages Python компьютера с ОС Windows. Вместо запуска выполняемого файла для установки модуля foo вы можете скопировать каталог foo в папку build/lib директории site-packages Python. Если имеют место ограничения на запуск выполняемых файлов пользователями, копирование директории foo из папки build/lib в папку site-packages приведет к тому же эффекту, что и установка его через исполняемый файл. Когда модуль foo будет установлен или скопирован в папку site-packages, структура будет следующей:

Требуется alt-текст

Этот процесс может быть реализован с целью расширения возможностей геообработки путем добавления пользовательских наборов инструментов и/или наборов инструментов Python непосредственно в системные наборы ArcGIS. Как любой системный набор инструментов, он находится в списке системных наборов в ArcGIS и может иметь обертки ArcPy для расширения ArcPy. Кроме того, это позволит пользовательскому модулю инструмента использовать преимущества устоявшейся методологии, используемой системными наборами инструментов ArcGIS для показа сообщений, языковой справки и локализованных настроек. ArcGIS for Desktop будет осуществлять поиск в местоположении site-packages Python, чтобы определить, существует ли директория esri в каждом модуле. Директория esri содержит пользовательские наборы инструментов, а также соответствующие файлы справки. Ниже представлена структура каталогов для английского языка:

Требуется alt-текст

Пользовательские наборы инструментов (.tbx и .pyt) находятся в папке esri/toolboxes вместе со скриптами при использовании инструментов-скриптов. В директории esri/help/gp хранятся метаданные (.xml) для пользовательских инструментов и наборов. Правила наименования наборов инструментов – <псевдоним набора инструментов>_toolbox.xml, а для инструмента – <имя инструмента>_<псевдоним набора инструментов>.xml. В каталоге esri/help/gp/messages хранятся файлы сообщений геообработки (.xml). Эти файлы сообщений используются в наборах инструментов Python для интернационализированных сообщений. Замещающие файлы надписей инструментов и наборов инструментов находятся в директории esri/help/gp/toolboxes. Путем создания нового набора инструментов Python SamplePythonToolbox можно продемонстрировать весь процесс расширения геообработки с использованием модулей Python. Для получения дополнительной информации о создании наборов инструментов Python и работе с ними перейдите на http://resources.arcgis.com/en/help/main/10.1/index.html#//001500000034000000.

ПримечаниеПримечание:

Необходимо указывать для набора инструментов Python псевдоним, который будет использоваться в этом процессе.

SamplePythonToolbox.pyt

Пример кода создания набора инструментов Python:

import arcpy
import os
import foo

class Toolbox(object):
    def __init__(self):
        """Define the toolbox (the name of the toolbox is the name of the
        .pyt file)."""
        self.label = "Toolbox"
        self.alias = "SampleToolbox"

        # List of tool classes associated with this toolbox
        self.tools = [SampleTool]


class SampleTool(object):
    def __init__(self):
        """Define the tool (tool name is the name of the class)."""
        self.label = "Sample Tool"
        self.description = ""
        self.canRunInBackground = False

    def getParameterInfo(self):
        """Define parameter definitions"""
        params = None
        return params

    def isLicensed(self):
        """Set whether tool is licensed to execute."""
        return True

    def updateParameters(self, parameters):
        """Modify the values and properties of parameters before internal
        validation is performed.  This method is called whenever a parameter
        has been changed."""
        return

    def updateMessages(self, parameters):
        """Modify the messages created by internal validation for each tool
        parameter.  This method is called after internal validation."""
        return

    def execute(self, parameters, messages):
        """The source code of the tool."""
        messages.AddMessage(os.getenv("username") + " welcome to the sample tool")
        foo.hello()
        return

В SamplePythonToolbox.pyt был импортирован модуль foo и метод запуска класса SampleTool вызвал функцию hello из модуля foo. Это эффективный путь использования пользовательского кода Python как модуля и применения его функциональных возможностей в инструментах геообработки ArcGIS. После создания SamplePythonToolbox.pyt и настройки панели справки для набора инструментов путем редактирования метаданных в меню Описание элемента (Item Description) или создания пользовательского компилированного файла справки (.chm) этот файл и файлы .xml необходимо скопировать из той папки, где он был создан. С помощью ArcCatalog или окна Каталога скопируйте файлы в папку esri/toolboxes, которая появляется в структуре каталогов. Компоновка директории esri и файла должна быть следующая:

Требуется alt-текст

Новая структура директорий должна быть следующей:

Требуется alt-текст

Чтобы отразить эти изменения в нашем распределении, нужно отредактировать файл setup.py.

Новый файл setup.py

Пример кода для включения изменений директории setup.py:

from distutils.core import setup
setup(name='foo',
    version='1.0',
    packages=['foo'],
    package_dir={'foo': 'foo'},
    package_data={'foo': ['esri/toolboxes/*.*']},
    )

Новый setup.py отличается от исходного одной строкой, в которой содержатся дополнительные данные, найденные в папке esri. Теперь, когда запущен и установлен модуль foo, в директории site-packages Python создана следующая структура директории:

Требуется alt-текст

С помощью ArcGIS for Desktop и Python Distribution Utilities (Distutils) вы можете создавать и устанавливать пакет, который расширит геообработку пользовательскими наборами инструментов, просматриваемыми и запускаемыми из системных наборов ArcGIS. Для английского языка больше ничего не требуется. Раздел Интернационализация дополняет процесс расширения геообработки с использованием той же методологии Esri для упаковки модуля с использованием других языков.

Связанные темы

5/10/2014