10.x から ArcGIS Pro への Python の移行

ArcGIS Pro での Python の使用方法は、ArcGIS DesktopArcGIS Server、ArcGIS Engine などの他の ArcGIS 製品での使用方法とは異なっています。

[ArcGIS Pro で実行するツールの分析 (Analyze Tools For Pro)] ジオプロセシング ツールを使用して、Python コードまたは Python ベースのジオプロセシング ツールの実行を妨げる問題を特定することができます。[ArcGIS Pro で実行するツールの分析 (Analyze Tools For Pro)] ツールは、Python 2to3 ユーティリティを使用して、発生する可能性がある移行の問題をレポートしたり、ArcGIS Pro に移行されていないツールや機能を特定したりします。

arcpy の機能に対する変更

ジオプロセシング ツールの大部分は引き続き ArcGIS Pro で使用できますが、使用できないツールもあります。含まれていないツールは、[カバレッジ] (arcpy.arc)、[パーセル ファブリック] (arcpy.fabric)、[Schematics] (arcpy.schematics)、[Tracking Analyst] (arcpy.ta) の各ツールボックスのツールです。その他のツールボックスの追加ツールも、使用できません。詳細な一覧については、ArcGIS Pro でサポートされていないツールの一覧をご参照ください。

arcpy.mapping モジュールは、ArcGIS Pro でマッピング ワークフローをサポートするために削除され、ArcGIS Proarcpy.mp モジュールに置き換えられました。

arcpy.na モジュールにも変更が含まれており、それらの多くは、arcpy.mapping から arcpy.mp への変更に関連しています。

Python 3 へのアップグレード

ArcGIS Pro では Python 3 を使用します。これは、Python 2 ラインのリリースを使用してきた (今後も継続して使用する) ArcGIS DesktopArcGIS Server、および ArcGIS Engine などの他の ArcGIS 製品と大きく異なる変更点です。Python 3 ラインは、Python 2 ラインとの互換性がない別のラインです。この言語の大半の部分は基本的に同じですが、重要な詳細においては多くの部分で大きく異なります。たとえば、文字列およびディクショナリの動作方法や標準的なライブラリの構成が異なります。

Python 3 は、5 年以上にわたり使用されており、Python コミュニティによって移植されてきた Python 2 と共存しています。現在では、主要なサード パーティのライブラリの大半は Python 3 に移植されており、Python コミュニティでは、すべての新しい導入プロジェクトは Python 3 で行われるのがコンセンサスとなっています。

スクリプトを ArcGIS Pro および Python 3 で動作させるために必要なこと

10.x と ArcGIS Pro の両方で動作するように Python コードを更新するか、ArcGIS Pro でのみ動作するように Python コードを更新するかを決めることは、重要なポイントです。コードを Python 2 から Python 3 にのみ変換する場合は、2to3 コマンド ライン ユーティリティを使用して、プロセスの大半を自動化することができます。このユーティリティは Python 2 と 3 の両方で使用できます。2to3 は、優れたツールですが完全なソリューションではなく (場合により約 95 % が解決されます)、その他の変更が必要になる場合があります。Python 2 および 3 をサポートする必要がある場合、両方をサポートする方法については以下をご参照ください。

Python スクリプトが単純である場合は、変更する必要がまったくない場合もあり、変更せずに問題なく実行できます。

後続のセクションでは、発生する可能性のある Python 2 および 3 の間の一般的な違いについて説明します。また、http://python3porting.com/ Web サイトにある Lennart Regebro の Porting to Python 3 は、Python 3 への移植や移行方法に関する参考資料として非常に役立ちます。Python 2 および Python 3 で実行されるスクリプトを記述できることを覚えておいてください。

標準的なライブラリの再構成

Python PEP 3108 で説明されているとおり、Python 3 の標準的なライブラリは、Python 2 と比べて大きく再構成されています。これらの変更の大半は、別の場所に移動した機能と関係があり、名前が変更されたモジュールの一部になっています。Python 2 および 3 の両方で動作するコードを記述するために、以下に示す urllib2 のようなモジュールのインポート機能を使用して、これらの違いを解決することができます。

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

printprint ステートメントおよびファンクション

Python 2 で発生する構文エラーの一般的な原因の 1 つは、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.iteritems() ではなく dictionary.items() を使用します。iteritems は、Python 3 では削除され、items は前の iteritems のように動作します。range および xrange も同様です。xrange は、Python 3 では削除され、rangexrange のように動作します。

文字列およびエンコーディング

Python 3 では、引用符内の中身は、黙示的にユニコード文字列になります。バイト配列は、古い str タイプと入れ替わります。unicode_literals インポートは、Python 2 での引用符内のすべてを黙示的にユニコードに変換します。

Python 3 は、文字列のエンコーディングの処理がより厳格化しました。スクリプトを保存していない場合は、UTF-8 として明示的に保存します。スクリプトの先頭に # coding: utf-8 などのコードを追加して、スクリプトが UTF-8 形式であることを Python が認識できるようにします。

io モジュール

io モジュールを検討します。これは Python 2.6 で導入され、Python 3 にも含まれています。このモジュールは、多くの入力や出力タスクをテキスト エンコーディングに対応した方法で処理するための簡単な方法を提供します。

サポートされていないデータ形式

ArcGIS Pro で現在サポートされていないデータ形式には、ラスター カタログ、ジオメトリック ネットワーク、スケマティック データセット、ジオデータベース サーバー、ArcMap ドキュメント テンプレート、ArcReader ドキュメント、グラフ、タイル マップ パッケージ、パーソナル ジオデータベースなどがあります。