ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • ヘルプ
  • Sign Out
ArcGIS Desktop

ArcGIS Online

組織のマッピング プラットフォーム

ArcGIS Desktop

完全なプロ仕様の GIS

ArcGIS Enterprise

エンタープライズ GIS

ArcGIS Developers

位置情報利用アプリの開発ツール

ArcGIS Solutions

各種業界向けの無料のテンプレート マップおよびテンプレート アプリケーション

ArcGIS Marketplace

組織で使えるアプリとデータを取得

  • ドキュメント
  • サポート
Esri
  • サイン イン
user
  • マイ プロフィール
  • サイン アウト

ArcMap

  • ホーム
  • はじめに
  • マップ
  • 解析
  • データ管理
  • ツール
  • エクステンション

Python モジュールによるジオプロセシングの拡張

Python 配布ユーティリティ (Distutils) を使用すると、モデルやスクリプト ツールを含む Python ツールボックスとカスタム ツールボックスを Python モジュールの形式で効率よく ArcGIS ユーザーに配布できます。これらのツールボックスを構築して配布するプロセスは、Python モジュールの作成から始まります。この例で使用するモジュールは、foo.py です。

foo.py

foo Python モジュールを作成するサンプル コードを次に示します。

import os
def hello():
    print('Hello ' + os.getenv('username'))

モジュールを正しく構築して配布するには、特定のディレクトリ構造が存在する必要があります。foo というディレクトリを作成し、foo モジュールを格納する必要があります。配布するには、foo モジュールが格納されたディレクトリが親ディレクトリ内に存在する必要があります。そのため、src というディレクトリを作成し、foo ディレクトリおよび foo モジュールをそこに格納します。ディレクトリ構造は、以下のようになります。

src という名前のディレクトリが作成され、foo ディレクトリと foo モジュールが格納されます。

foo モジュールをインポートしたときに、特定のコードを初期化して自動的に実行するには、__init__.p ファイルが必要になります。__init__ を所定の場所に配置することで、ユーザーは foo モジュールにアクセスし、選択した定義をインポートできるようになります。

__init__.py

foo 用の __init__.py を作成するサンプル コードを次に示します。

from foo import hello

ここで、ディレクトリ構造は、以下のようになります。

__init__.py ファイルが必要です。

ファイルおよびディレクトリ構造を所定の場所に配置することで、import foo を使用して foo モジュールをインポートし、foo.hello() を呼び出して実行できるようになります。次のステップは、foo モジュールの配布パッケージを構築することです。これにより、モジュールを Python のサイトパッケージ ディレクトリにインストールして簡単に共有することができます。setup.py スクリプトを記述することによって、これを実行できます。

setup.py

setup.py を作成するサンプル コードを次に示します。

from distutils.core import setup
setup(name='foo',
    version='1.0',
    packages=['foo'],
    package_dir={'foo': 'foo'},
    )

setup.py ファイルでは、モジュールの名前とバージョンを設定し、ビルド ユーティリティに対してパッケージ ディレクトリを指定します。setup.py ファイルは、src ディレクトリに保存します。この時点で、ディレクトリ構造は以下のようになります。

setup.py ファイルを src ディレクトリ内に作成する必要があります。

所定のディレクトリ構造を作成することで、該当するオペレーティング システムのコマンド プロンプトを使用して、次のいずれかのコマンドを src ディレクトリ内で実行し、foo モジュール用のインストーラーを構築できます。この例では、Windows OS 上で構築します。

メモ:

必ず、使用しているシステム上で python.exe のパスを設定してください。Windows OS では、Windows OS 環境変数の Path システム変数に Python インストールのパスを追加することによって、これを実行できます。

Windows:

python setup.py bdist_wininst

Linux:

python setup.py bdist_rpm

Windows のビルダーは、src ディレクトリ内に dist ディレクトリおよび build ディレクトリを作成します。foo-1.0.win32.exe が、dist ディレクトリに作成されます。このファイルは、foo モジュールを Windows コンピューター上の Python のサイトパッケージ ディレクトリにインストールするために配布できる、実行可能ファイルです。実行可能ファイルを実行して foo モジュールをインストールする代わりに、foo ディレクトリを、build/lib ディレクトリから Python の サイトパッケージ ディレクトリに直接コピーすることもできます。実行可能ファイルの実行を禁止するユーザー制約が存在する場合、foo ディレクトリを build/lib ディレクトリからサイトパッケージ ディレクトリにコピーすることは、実行可能ファイルを使用してインストールするのと同じ効果があります。foo モジュールをサイトパッケージ ディレクトリにインストールまたはコピーすると、ディレクトリ構造は以下のようになります。

foo モジュールをサイトパッケージ ディレクトリにインストールまたはコピーする必要があります。

このプロセスをさらに実行し、カスタム ツールボックスや Python ツールボックスを ArcGIS システム ツールボックスに直接追加することによって、ジオプロセシング機能を拡張できます。これらのツールボックスは、システム ツールボックスとして ArcGIS 内のシステム ツールボックスのリストから簡単にアクセスできるようになります。ArcPy を拡張するための ArcPy ラッパーを作成することもできます。さらに、カスタム ツールボックス モジュールは、ArcGIS システム ツールボックスで十分に確立されている手法を活用して、メッセージの配布、言語ベースのヘルプ、ローカライズされた設定に対応できます。ArcGIS Desktop は、Python のサイトパッケージの場所を検索して、esri という名前のディレクトリが各モジュール内に存在するかどうかを確認します。esri ディレクトリには、カスタム ツールボックスとそれらに関連するヘルプ ファイルが格納されています。英語版の場合のディレクトリ構造を、以下に示します。

esri ディレクトリには、カスタム ツールボックスと各ツールボックスに関連するヘルプ ファイルが格納されています。

カスタム ツールボックス (*.tbx および *.pyt) は、サポート用のスクリプト (スクリプト ツールを使用している場合) と共に esri/toolboxes ディレクトリに配置されています。esri/help/gp ディレクトリには、カスタム ツールボックスおよびツール用のメタデータ (*.xml) が格納されます。ツールボックスの命名規則は <toolbox alias>_toolbox.xml であり、各ツールの命名規則は <toolname>_<toolbox alias>.xml です。esri/help/gp/messages ディレクトリには、ジオプロセシング メッセージ (*.xml) ファイルが配置されます。これらのメッセージファイルは、ローカライズする必要のあるメッセージ用に Python ツールボックス内で使用されます。ツールボックスおよびツールのラベル カテゴリのオーバーライド ファイルは、esri/help/gp/toolboxes ディレクトリにあります。SamplePythonToolbox という名前の新しい [Python] ツールボックスの作成を通じて、Python モジュールを使用したジオプロセシングの拡張プロセス全体を示すことができます。[Python] ツールボックスの作成および動作に関する詳細は、「新しい Python ツールボックスの作成」をご参照ください。

メモ:

このプロセスで使用する Python ツールボックスのエイリアスを設定することは重要です。

SamplePythonToolbox.pyt

Python ツールボックスを作成するサンプル コードを次に示します。

import arcpy
import os
import foo
class Toolbox(object):
    def __init__(self):
        """Define the toolbox (the name of the toolbox is the name of the
        .pyt file)."""
        self.label = "Toolbox"
        self.alias = "SampleToolbox"
        # List of tool classes associated with this toolbox
        self.tools = [SampleTool]
class SampleTool(object):
    def __init__(self):
        """Define the tool (tool name is the name of the class)."""
        self.label = "Sample Tool"
        self.description = ""
        self.canRunInBackground = False
    def getParameterInfo(self):
        """Define parameter definitions"""
        params = None
        return params
    def isLicensed(self):
        """Set whether tool is licensed to execute."""
        return True
    def updateParameters(self, parameters):
        """Modify the values and properties of parameters before internal
        validation is performed.  This method is called whenever a parameter
        has been changed."""
        return
    def updateMessages(self, parameters):
        """Modify the messages created by internal validation for each tool
        parameter.  This method is called after internal validation."""
        return
    def execute(self, parameters, messages):
        """The source code of the tool."""
        messages.AddMessage(os.getenv("username") + " welcome to the sample tool")
        foo.hello()
        return

SamplePythonToolbox.pyt では、foo モジュールがインポートされ、SampleTool クラスの execute メソッドが foo モジュールの hello 関数を呼び出します。これは、カスタム Python コードをモジュールとして配布し、その機能を ArcGIS ジオプロセシング ツールを介して公開する方法として効果的です。SamplePythonToolbox.pyt を作成し、[アイテム説明] ショートカット メニューで編集されたメタデータによってこのツールボックス用にサイドパネルのヘルプを構成しているか、独自にコンパイルされたヘルプ ファイル (*.chm) を作成している場合、そのファイルを作成したディレクトリから、そのファイルとそれに付随する *.xml ファイルをコピーする必要があります。ArcCatalog または [カタログ] ウィンドウを使用して、配布用ディレクトリ構造内にある esri/toolboxes ディレクトリにこれらのファイルをコピーします。esri ディレクトリとファイルの配置を以下に示します。

ディレクトリ構造内のツールボックスのサイドパネルのヘルプ ファイル

配布用の新しいディレクトリ構造は、以下のようになります。

esri ディレクトリおよびファイル レイアウトに含まれるツールボックスのサイドパネルのヘルプ ファイル

これらの変更を配布に反映するには、setup.py ファイルを編集する必要があります。

新しい setup.py

setup.py のディレクトリの変更を含むサンプル コードを次に示します。

from distutils.core import setup
setup(name='foo',
    version='1.0',
    packages=['foo'],
    package_dir={'foo': 'foo'},
    package_data={'foo': ['esri/toolboxes/*.*']},
    )

新しい setup.py と元の setup.py は、esri ディレクトリ内に存在するデータをパッケージに追加している 1 行が異なります。ここで、foo モジュール用のビルダーを実行してインストールすると、以下のディレクトリ構造が、Python のサイトパッケージ ディレクトリに作成されます。

Python サイトパッケージ内に作成されるディレクトリ構造

ArcGIS Desktop と Python 配布ユーティリティ (Distutils) を使用すると、パッケージを構築してインストールし、カスタム ツールボックス内のカスタム ツールでジオプロセシングを拡張できます。これらのカスタム ツールは、ArcGIS システム ツールボックス内で表示して実行できます。英語での配布の場合、必要なプロセスは以上です。ローカライゼーションのトピックでは、Esri が使用している手法と同じ手法を活用して、英語以外の言語で配布するためにモジュールをパッケージ化するジオプロセシングの拡張プロセスについて詳しく説明しています。

関連トピック

  • Python モジュールのローカライゼーション

ArcGIS Desktop

  • ホーム
  • ドキュメント
  • サポート

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

Esri について

  • 会社概要
  • 採用情報
  • Esri ブログ
  • ユーザ カンファレンス
  • デベロッパ サミット
Esri
ご意見・ご感想をお寄せください。
Copyright © 2021 Esri. | プライバシー | リーガル