Перенос Python с версии 10.х на ArcGIS Pro

Использование Python в ArcGIS Pro отличается от других продуктов ArcGIS, включая ArcGIS Desktop, ArcGIS Server и ArcGIS Engine.

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

Изменения функциональности в ArcPy

Большинство инструментов геообработки будут доступны в ArcGIS Pro, но не все. Инструменты, которые не включены, - это инструменты из наборов инструментов Coverage, Parcel Fabric, Schematics и Tracking Analyst. Также не будут доступны дополнительные инструменты в других наборах инструментов. Подробно см. список инструментов, не поддерживаемых в ArcGIS Pro.

Модуль arcpy.mapping был удален и заменен модулем arcpy.mp в ArcGIS Pro, чтобы поддерживать картографические рабочие процессы в ArcGIS Pro.

Модуль arcpy.na также включает изменения, большая часть которых связана с переходом с arcpy.mapping на arcpy.mp.

Обновление до Python 3

ArcGIS Pro использует Python 3. Это значительное изменение по сравнению с такими продуктами ArcGIS, как ArcGIS Desktop, ArcGIS Server, and ArcGIS Engine, которые используют (и будут продолжать использовать) версии в линии Python 2. Линия релизов Python 3 является другой линией, которая несовместима с линией Python 2. Хотя принципиально большая часть языка осталась той же самой, многие ключевые детали существенно изменились, в том числе то, как работают строки и словари и то, как организована стандартная библиотека.

Python 3 активно развивался в течение многих лет, существуя параллельно с Python 2, пока сообщество Python переходило на более высокую версию. В это время большинство ключевых сторонних библиотек было перенесено на Python 3 и в сообществе Python было достигнуто соглашение о том, что все новые проекты развития будут выполняться на Python 3.

Что требуется, чтобы мои скрипты работали в ArcGIS Pro и Python 3?

Ключевая точка принятия решения в том, будете ли вы обновлять свой код Python для работы как в 10.х, так и в ArcGIS Pro, или же просто для работы в ArcGIS Pro. Если вы выполняете одностороннее преобразование кода из Python 2 в Python 3, то можно воспользоваться утилитой командной строки 2to3, которая может быть использована для автоматизации большей части процесса. Эта утилита доступна как в Python 2, так и в 3. Важно заметить, что, хотя утилита 2to3 и является превосходным инструментом, она не предоставляет полного, законченного решения (иногда полученный эффект оценивается в 95 процентов от полного решения), и могут потребоваться дополнительные изменения. Если вам необходима поддержка Python 2 и 3, ниже представлена информация о стратегии поддержки обоих версий.

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

В следующих разделах рассматриваются некоторые из наиболее общих различий между Python 2 и 3, с которыми вам скорее всего придётся столкнуться. Кроме того, отличным справочным материалом по портированию на Python 3 и по стратегиям переноса является руководство Леннарта Регебро Porting to Python 3 и веб-сайт http://python3porting.com/. Помните, что можно написать скрипты, которые будут работать и в Python 2, и в Python 3.

Реорганизация стандартной библиотеки

Python 3 включает в себя значительную реорганизацию стандартной библиотеки из Python 2. Большинство изменений включают функциональность, которая перемещена в другое расположение или часть модуля, которая была переименована. Чтобы написать код, который работает как в Python 2, так и в 3, эти различия могут быть обработаны посредством использования гибких процессов импорта таких модулей, как urllib2:

try:
    import urllib2  # Python 2
except ImportError:
    import urllib.request as urllib2  # Python 3

выражение и функция print

Одной из наиболее распространенных причин синтаксических ошибок в Python 2 является преобразование выражения print в функцию print. К счастью, функция print была обратно портирована в Python 2 и может безопасно использоваться и в Python 2 и 3.

print('This will print safely in Python 2 and 3')

# print statements will only work in Python 2
# print 'Print statements will only print safely in Python 2'

__future__

В верхней части ваших скриптов импортируйте флаги __future__, чтобы ваш код Python 2 подпадал под действие некоторых новых правил Python 3. Как только ваши скрипты с этой строкой будут правильно синтаксически проанализированы, вы встанете на путь к совместимости с Python 3.

from __future__ import print_function, unicode_literals, absolute_import

Словари

Используйте dictionary.items() вместо dictionary.iteritems(), где это возможно. iteritems был удалён из Python 3, и items ведёт себя подобно iteritems. То же применимо к range и xrange: xrange был удален из Python 3 и range ведет себя подобно xrange.

Строки и кодировка

В Python 3 что-либо, заключённое в кавычки, рассматривается неявно как строка в кодировке Unicode. Байтовый массив занимает место старого типа str. Импорт unicode_literals будет неявно преобразовывать все, заключенное в кавычки, в Python 2 в Unicode.

Python 3 строже в обработке кодировок. Явно сохраните ваши скрипты в кодировке UTF-8, если вы еще этого не сделали. Добавьте строку определения кодировки типа # coding: utf-8 в начале вашего скрипта, чтобы сообщить Python о том, что скрипт записан в кодировке UTF-8.

Модуль io

Используйте модуль io. Он был введен в Python 2.6 и включён в Python 3; это обеспечивает ясный способ обработки множества входных и выходных задач с распознаванием кодировки текста.

Неподдерживаемые форматы данных

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