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

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

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

ArcPy の機能に対する変更

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

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

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

Python 3

ArcGIS AllSource では Python 3 が使用されます。Python 3 は、データ分析、データ サイエンス、品質保証、Web 開発やソフトウェア開発などのさまざまな分野で一般に使用されているプログラミング言語です。

レガシー:

ArcGIS DesktopArcGIS ServerArcGIS Engine などの以前の ArcGIS 製品では Python 2 バージョンが使用されます。 Python 3 リリースは別の製品ラインであり、Python 2 とは部分的にしか互換性がありません。この言語の大半の部分は基本的に同じですが、詳細においては多くの部分で異なります。たとえば、文字列およびディクショナリの動作方法や標準的なライブラリの構成が異なります。

ArcGIS AllSource および Python 3 での使用に向けた既存スクリプトの変換

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

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

後続のセクションでは、発生する可能性のある Python 2 および 3 の間の一般的な違いについて説明します。 また、Python 3 への移植や移行方法に関する参考資料の 1 つとして、Lennart Regebro の Porting to Python 3 (http://python3porting.com/ Web サイト) が挙げられます。 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

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 では削除され、itemsiteritems のように動作します。 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 AllSource で現在サポートされていないデータ形式には、ラスター カタログ、ジオメトリック ネットワーク、スケマティック データセット、ジオデータベース サーバー、ArcMap ドキュメント テンプレート、ArcReader ドキュメント、グラフ、タイル マップ パッケージ、パーソナル ジオデータベースなどがあります。