Распространяйте и устанавливайте пользовательские модули геообработки, следуя стандартным шаблонам размещения пакетов Python.
В этом разделе рассматривается пример модуля fooиз раздела Создание модулей геообработки.
Распространие модуля геообработки в виде сжатого архива
Чтобы разместить модуль геообработки в виде сжатого архива выполните следующие шаги:
- Клонируйте среду ArcGIS Pro conda по умолчанию
- Переключите текущую среду ArcGIS Pro conda в клонированную среду с помощью диспетчера пакетов Python.
Примечание:
Для ArcGIS Pro изменение среды Python по умолчанию (arcgispro-py3) не рекомендуется и может привести к непредсказуемым последствиям. Рекомендуется изменять только клонированную среду.
- Скопируйте каталог модуля foo в папку %LocalAppData%\ESRI\conda\envs\<environment_name>\Lib\site-packages.
- Архивируйте свой модуль в формате .zip (или другой предпочтительный формат сжатия) и предоставьте инструкции по извлечению архива в папку site-packages.
Распространие модуля геообработки с помощью pip
Модули геообработки можно распространть посредством pip с Wheel-файлом, используя библиотеку setuptools.
Примечание:
Для размещения модуля с помощью pip требуются пакеты conda, pip, setuptools и wheel в среде Python. Эти пакеты включены в среду по умолчанию ArcGIS Pro Python.
Создание wheel-файла для распространения
Для пакета foo, чтобы его можно было установить в каталоге Python site-packages, требуется пакет распространения (дистрибутив). С помощью пакета распространения этот пакет можно опубликовать, чтобы его могли использовать другие пользователи.
Для создания wheel-файла выполните следующие шаги:
- Создайте скрипт 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/*'] }, )
- При распространении модуля геообработки, поддерживающего дополнительные языки, параметр функции 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
- Чтобы создать установщик для пакета 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-файл в активную среду.
- Введите следующую команду в командной строке 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 присутствует только в том случае, если в пакете содержатся файлы сообщений.
- Если на вашем компьютере установлены ограничения, запрещающие выполнение установки, копирование каталога 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, с модулем геообработки, поддерживающим несколько разных языков.