Распространение модулей геообработки

Распространяйте и устанавливайте пользовательские модули геообработки, следуя стандартным шаблонам размещения пакетов Python.

В этом разделе рассматривается пример модуля fooиз раздела Создание модулей геообработки.

Распространие модуля геообработки в виде сжатого архива

Чтобы разместить модуль геообработки в виде сжатого архива, заархивируйте модуль (например, пакет foo) в формат .zip или в другой предпочитаемый формат сжатия. Затем предложите вашей аудитории выполнить следующие действия:

  1. Клонируйте среду ArcGIS Pro conda по умолчанию
    Примечание:

    Для ArcGIS Pro изменение среды Python по умолчанию (arcgispro-py3) не рекомендуется и может привести к непредсказуемым последствиям. Рекомендуется изменять только клонированную среду.

  2. Распакуйте пакет foo в папку пакетов клона (%LocalAppData%\ESRI\conda\envs\<clone_environment_name>\Lib\site-packages).
  3. Переключите текущую среду ArcGIS Pro conda в клонированную среду с помощью диспетчера пакетов Python.

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

Модули геообработки можно распространть посредством pip с Wheel-файлом, используя библиотеку setuptools.

Примечание:

Для размещения модуля с помощью pip требуются пакеты conda, pip, setuptools и wheel в среде Python. Эти пакеты включены в среду по умолчанию ArcGIS Pro Python.

Создание wheel-файла для распространения

Для пакета foo, чтобы его можно было установить в каталоге Python site-packages, требуется пакет распространения (дистрибутив). С помощью пакета распространения этот пакет можно опубликовать, чтобы его могли использовать другие пользователи.

Для создания wheel-файла выполните следующие шаги:

  1. Создайте скрипт setup.py, похожий на следующий:

    setup.py

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

    import os 
    from setuptools import setup 
     
    def read(fname): 
        return open(os.path.join(os.path.dirname(__file__), fname)).read() 
     
    setup(name='foo', 
          version='1.0',
          author='Esri',
          description=("Example for extending geoprocessing through Python modules"),
          long_description=read('Readme.txt'),
          python_requires='~=3.3',
          packages=['foo'], 
          package_data={'foo':['esri/toolboxes/*',  
                      'esri/arcpy/*', 'esri/help/gp/*',  
                      'esri/help/gp/toolboxes/*', 'esri/help/gp/messages/*'] 
                      }, 
          )

  2. При распространении модуля геообработки, поддерживающего дополнительные языки, параметр функции setup (параметр package_data) должен включать дополнительные языковые каталоги. Например, в случае с локализацией для испанского языка setup.py должен быть следующим:

    setup.py с локализацией для испанского языка

    Пример кода для setup.py для включения каталогов локализации для испанского языка.

    import os 
    from setuptools import setup 
     
    def read(fname): 
        return open(os.path.join(os.path.dirname(__file__), fname)).read() 
     
    setup(name='foo', 
          version='1.0', 
          author='Esri', 
          description=("Example for extending geoprocessing through Python modules"), 
          long_description=read('Readme.txt'), 
          python_requires='~=3.3', 
          packages=['foo'], 
          package_data={'foo':['esri/toolboxes/*',  
                      'esri/arcpy/*', 'esri/help/gp/*',  
                      'esri/help/gp/toolboxes/*', 'esri/help/gp/messages/*',
                      'esri/help/es/gp/*', 'esri/help/es/gp/toolboxes/*', 
                      'esri/help/es/gp/messages/*'] 
                      }, 
          )

    Скрипт сборки setup.py задает несколько свойств и направляет служебную программу сборки в каталог пакета. Длинное описание хранится в сопроводительном файле Readme.txt. Файлы setup.py и Readme.txt должны находиться в каталоге src. Дополнительные сведения об использовании setup() см. в разделе Упаковка и распространение проектов. Ниже представлена структура каталогов для пакета foo (в случае, если поддерживается только английский язык, дополнительная папка es испанского языка исключается):

    Src
    ├  setup.py
    ├  Readme.txt
    └──foo
        ├  __init__.py 
        ├  bar.py
        └──esri
            ├──arcpy
            │   └  SamplePythonToolbox.py
            ├──help
            │   ├──es
            │   │   └──gp
            │   │       ├  SamplePythonToolbox_toolbox.xml
            │   │       ├  SampleTool_SamplePythonToolbox.xml
            │   │       ├──messages
            │   │       │   └  messages.xml
            │   │       └──toolboxes
            │   │           └  SamplePythonToolbox.xml
            │   └──gp
            │       ├  SamplePythonToolbox_toolbox.xml
            │       ├  SampleTool_SamplePythonToolbox.xml
            │       ├──messages
            │       │   └  messages.xml
            │       └──toolboxes
            │           └  SamplePythonToolbox.xml
            └──toolboxes
                ├  SamplePythonToolbox.pyt
                ├  SamplePythonToolbox.pyt.xml
                └  SamplePythonToolbox.SampleTool.pyt.xml
  3. Чтобы создать установщик для пакета foo, выполните следующую команду из каталога src, используя командную строку:

    python setup.py sdist bdist_wheel

    Команда sdist bdist_wheel создает папки dist, build и foo.egg-info в каталоге предыдущего уровня src. В папке dist создается wheel-файл с именем foo-1.0-py3-none-any.whl. Wheel-файл может быть размещен непосредственно с помощью pip.

Установка из wheel-файла с помощью pip

После клонирования и переключения среды откройте Командную строку Python, чтобы установить wheel-файл непосредственно с помощью pip. Pip установит wheel-файл в активную среду.

  1. Введите следующую команду в командной строке Python из директории src\dist:

    pip install foo-1.0-py3-none-any.whl

    Когда будет установлен пакет foo, в директории site-packages будет создана следующая структура каталогов (в случае, если поддерживается только английский язык, дополнительная папка es испанского языка исключается):

    site-packages
    └──foo
        ├  __init__.py 
        ├  bar.py
        └──esri
            ├──arcpy
            │   └  SamplePythonToolbox.py
            ├──help
            │   ├──es
            │   │   └──gp
            │   │       ├  SamplePythonToolbox_toolbox.xml
            │   │       ├  SampleTool_SamplePythonToolbox.xml
            │   │       ├──messages
            │   │       │   └  messages.xml
            │   │       └──toolboxes
            │   │           └  SamplePythonToolbox.xml
            │   └──gp
            │       ├  SamplePythonToolbox_toolbox.xml
            │       ├  SampleTool_SamplePythonToolbox.xml
            │       ├──messages
            │       └──toolboxes
            │           └  SamplePythonToolbox.xml
            └──toolboxes
                ├  SamplePythonToolbox.pyt
                ├  SamplePythonToolbox.pyt.xml
                └  SamplePythonToolbox.SampleTool.pyt.xml
    Примечание:

    Папка messages присутствует только в том случае, если в пакете содержатся файлы сообщений.

  2. Если на вашем компьютере установлены ограничения, запрещающие выполнение установки, копирование каталога foo из каталога build\lib в папку %LocalAppData%\ESRI\conda\envs\<environment_name>\Lib\site-packages приведет к тому же эффекту, что и установка из архивного файла. При копировании пакета вручную он не будет распознаваться или управляться pip.

Использование модуля геообработки

В ArcGIS Pro инструмент SamplePythonToolbox будет доступен на панели Геообработка, а также доступен для поиска. Этот же набор инструментов можно будет использовать и в arcpy: arcpy.SamplePythonToolbox.SampleTool()

Используя ArcGIS Pro и процесс разработки пакета Python, вы можете создать и разместить пакет, расширяющий возможности геообработки за счет пользовательских наборов инструментов, которые можно будет просматривать и использовать в наборах инструментов системы ArcGIS и arcpy, с модулем геообработки, поддерживающим несколько разных языков.

Связанные разделы