ArcGISでPythonツールボックス(* .pyt)を整理するためのガイドライン


17

私のタスクの1つとして、3つのツール(Pythonスクリプト)を含むツールボックスを作成する必要があります。

通常のtbxの代わりに、Python Toolbox(pyt)として作成することにしました。

コードを整理する「良い」方法を除いて、すべてが明確です。

3つのツールがあるので、1つのファイル(pyt)に保存するのは良い方法ではありません。そこで、各ツールを別々の.pyファイルに保存することにしました。

ここに問題があります:ArcGIS for Serverでの配布または配置のために、PYTでいくつかのファイルを整理する良い方法は何ですか?PYTファイルと同じレベルに保持する必要がありますか、それともサブディレクトリ(つまり「ツール」)に配置する必要がありますか?

Esriのガイドラインを推奨したり、「big PYTツールボックス」サンプルを参照したりできますか?

このトピックについては何も見つかりません。バージョン10.0では、私が使用したToolShareフォルダー構造と呼ばれるものがありました。

これは、コーディングのスタイルの問題です。500行から1000行以上のコードを含む1つのPYTファイルを作成するというアイデアは見た目が良くなく、「pythonic」な方法ではないと考えているためです。


1
「500〜1000行以上のコードで1つのPYTファイルを作成するという考えは、私にはよく見えません」。アレックス、あなたは一人じゃない。今日、私はすぐに.pytは病気の発明だと述べました。そして、私はそれを後悔しません。
レミジウスパンケビチウス14年

回答:


17

ArcGISフォーラムでこのスレッドをご覧ください。基本的には、標準のPythonモジュールまたはパッケージ構造を使用して、ツールをPythonツールボックスにインポートします。

何かのようなもの:

#  \--SomeDir
#     |  toolbox.pyt
#     \--toolpackage
#        |  __init__.py
#        |  script_a.py
#        |  script_b.py


#----------------------------
#The .pyt file
#----------------------------

import arcpy
import toolpackage.script_a.Tool1 as Tool1
import toolpackage.script_a.Tool2 as Tool2
import toolpackage.script_b.Tool3 as Tool3

class Toolbox(object):
    def __init__(self):
        """Define the toolbox (the name of the toolbox is the name of the
        .pyt file)."""
        self.label = "MultiTool Toolbox"
        self.alias = "mtt"

        # List of tool classes associated with this toolbox
        self.tools = [Tool1, Tool2, Tool3]

これはArcGIS Desktopでも問題なく動作することがわかりましたが、ArcGIS Serverインスタンスにジオプロセシングサービスを公開すると、.pytファイルを除くすべてのスクリプトとパッケージが失われます。スクリプトを手動で展開にドロップすることも可能かもしれませんが、それにより複雑さが増します。
グナット

3
@Gnatはい、ルークの考えは私の経験でもあります。ESRIのパブリッシングサービスは、from x import yスタイルのインポートを認識しません。(ちなみに、それはまったくばかげています。)しかし、私はあなたのself.tools定義をそのままにして使用することができると信じていますimport toolpackage.script_a.Tool1 as Tool1
jpmc26 14

1
エイリアスは短く、文字のみを含む必要があります。つまり、self.alias = "mtt"
Curtis Price

2
ツールコードを1時間だけ変更して、Arcmapのツールguiに反映されるようにしたので、これを共有したいと思います。pytファイルの外部でコードを変更し、ツールguiに反映されるようにするには、ArcMap / Catalogを再起動する必要があります。ツールボックスで必要なすべての更新をヒットできますが、それはpyt自体をリロードするようです。他のコードへの変更は見つかりません。
TurboGus

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.