Перенос 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. Python 3 - это популярный язык программирования, который используется в различных областях, включая анализ данных, науку о данных, обеспечение качества, а также разработку веб-сайтов и программного обеспечения.

Прежние версии:

Более ранние продукты ArcGIS, включая ArcGIS Desktop, ArcGIS Server и ArcGIS Engine используют версии Python 2. Версии Python 3 - это другая линейка, лишь частично совместима с Python 2. Хотя в основном язык остался прежним, многие детали изменились, включая работу со строками и словарями, а также структуру стандартной библиотеки.

Преобразование существующего скрипта для использования в ArcGIS Pro и Python 3

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

В более простых скриптах Python изменения могут не потребоваться вовсе, и они могут прекрасно работать и без них.

В следующих разделах описываются некоторые различия между версиями Python 2 и 3, с которыми вам скорее всего придётся столкнуться. Кроме того, один из лучших материалов по переходу на Python 3 и стратегиям переноса данных можно найти в статье Леннарта Регебро Переход на 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 находится в кавычках.

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

Модуль io

Модуль io был впервые представлен в версии Python 2.6 и включен в Python 3. Он обеспечивает простой способ обработки многих задач по вводу и выводу данных с учетом кодировки текста.

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

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