ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

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

ArcGIS Online

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

ArcGIS Desktop

完全なプロ仕様の GIS

ArcGIS Enterprise

エンタープライズ GIS

ArcGIS for Developers

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

ArcGIS Solutions

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

ArcGIS Marketplace

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

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

ヘルプ

  • ホーム
  • はじめに
  • マップ
  • 解析
  • データ管理
  • ツール
  • その他...

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

Python 配布ユーティリティ (Distutils) および Python のドキュメント「Distributing Python Modules」に記載された情報を使用して、モデルやスクリプト ツールを含む 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__ ファイルが必要です。

ファイルおよびディレクトリ構造を所定の場所に配置することで、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 for 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 for Desktop と Python 配布ユーティリティ (Distutils) を使用してパッケージを構築およびインストールし、カスタム ツールボックス内のカスタム ツールによってジオプロセシングを拡張できます。これらのカスタム ツールは、ArcGIS システム ツールボックス内で表示して実行できます。英語での配布の場合、必要なプロセスは以上です。ローカライゼーションのトピックでは、ジオプロセシングの拡張プロセスを拡大して、Esri が使用するのと同じ手法を活用し、英語以外の言語で配布するためにモジュールをパッケージ化します。

関連トピック

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

ArcGIS Desktop

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

ArcGIS プラットフォーム

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Esri について

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