スクリプトの編集後にPythonアドインを再コンパイルしますか?


15

私はいくつかのpythonアドインを開発してきましたが、スクリプトを編集するたびにアドインを再コンパイルする最善の方法は何なのか疑問に思っています。

現在、スクリプトを編集すると、次のようになります。

  1. ArcMapを閉じる
  2. マイアドインフォルダーに移動し、 'makeaddin' Pythonファイルをダブルクリックします
  3. 「Pythonアドインファイル」をダブルクリックします
  4. 変更を有効にするためにArcMapを再起動します

これらの手順を実行しないと、編集が認識されません。単純な印刷行をどこかに配置したい場合や、結果をテストするためだけに小さな編集を行う場合、これはかなり面倒で時間がかかります。

これを行うより良い方法はありますか?

回答:


11

reloadPython の組み込み関数を使用して、モジュールを自動的にリロードできます。あなたができることはこのようなものです:

import mymodule

def hook():
    reload(mymodule)
    mymodule.myfunction()

どこhook()のArcMapで何と呼ばれていますとされmymoduleますが、呼び出し間で編集しているモジュールです。失敗しないsys.pathように、編集しているモジュールのパスを含めるために編集する必要がある場合がありますimport mymodule。または、ディレクトリを含めますsite-packages(おそらくを使用python setup.py develop)。


1
もちろん、これは開発中にのみ役立ちます。私はあなたがアドイン(構築する前にスクリプトをテストするためのArcGISデザイナーが意図し信じるresources.arcgis.com/en/help/main/10.1/index.html#/...
CWA

これも私がやっていることです。また、組み込みデバッグにはwinpdbを使用します。
blah238

提案をありがとう。これは私のスキルセットを少し超えています。実装するのは難しいですか?これについて、学習に使用できる情報はありますか?
マイク

1
私は、ArcGISの経験が限られているPython開発者ですが、学んでいます。詳細を確認してから更新します。
cwa

@ blah238組み込みデバッグをどのように構成しましたか?アドインは接続しますが、ロード後に接続をドロップします。
ShaunLangley

8

@ blah238の提案に従って、次のスクリプト

  1. ArcMapを閉じます(開いている場合)
  2. アドインを作成します
  3. アドインをサイレントインストールします
  4. ArcMapドキュメントを再度開きます

makeaddin.pyを含むディレクトリに保存します。

import os

#Location of ESRIRegAddIn.exe
esri = "C:/Program Files (x86)/Common Files/ArcGIS/bin/ESRIRegAddIn.exe"
cwd = os.getcwd()
mapdoc = <path to mxd>

#Close ArcMap if it is open
try:    os.system("TASKKILL /F /IM ArcMap.exe")
except:    pass

#Create ESRI Add-in file
os.system(os.path.join(cwd, "makeaddin.py"))

#Silently install Add-in file. The name of the file is based on folder it's located in.
os.system('"{0}" {1} /s'.format(esri, os.path.split(cwd)[-1] + ".esriaddin"))

#Open test map document.
os.system(mapdoc)

これはPythonTool_addin.pyファイルに含まれていますか?
ShaunLangley

@ShaunLangley、いいえ、これはmakeaddin.pyのディレクトリにある別の.pyファイルです。
ポール

すばらしいスクリプト。ただし、予想どおり、スクリプトがArcMapの外部で.mxdファイルを開こうとすると、ArcMapは倒れます。これに対する既知の修正はありますか?
TheLastGIS

1
@TheLastGISはい。変数arcmap = "C:/Program Files (x86)/ArcGIS/Desktop10.3/bin/ArcMap.exe"Map = '"{0}" {1} /s'.format(arcmap, mapdoc)上記に追加します。そして、os.system(Map)どこ成功しますos.system(mapdoc)しません。
alphabetasoup

2

ArcGIS Webサイトで回答を受け取りました。どうやらこれは、Pythonアドインを再コンパイルする唯一の方法です。誰かがArcGIS Ideasでアイデアを記録し、私も投票してコメントしました。

ArcGISディスカッションフォーラムのスレッドはこちらにあります


1
関連するリンクを回答に追加していただけますか?
blah238

投票したかったのですが、@ Mikeが言及しているArcGISのアイデアが見つかりませんでした。
PolyGeo

申し訳ありませんが、これまでこの返信は表示されませんでした。ArcGIS Webサイトへのリンクを更新してくれた@PolyGeoに感謝します。
マイク

1

通常、2つのアプローチを使用します。1つは、使用するツールがジオプロセシングであり、それらをインポートできるようにし、対話的なPythonセッションをセットアップし、reload(mymodule)前述のように最新の変更を含める(またはセットアップする)IPythonでの自動リロード)。Pythonツールボックスを変更するだけの場合は、カタログビューで右クリックして[更新]をクリックすると、ツールボックスをリロードできます。

GUIでユーザーの操作が必要なコードの場合、次のバッチスクリプトを使用してプロセスを高速化します。

@echo off
echo building...
python makeaddin.py
echo installing...
start myaddin.esriaddin
echo load ArcMap...
start %HOMEDRIVE%%HOMEPATH%\Documents\ArcGIS\myaddin.mxd

myaddin.mxdには、特定のプロジェクトに使用するデータレイヤーとコンテキストがあります。これにより、アドインのインストールとArcMapが同時に起動しますが、通常、ArcGISが起動するよりも速く[アドインのインストール]ボタンをクリックできます。または、pause最後のコマンドの前に追加して、ArcGISを起動する前に入力を待機することもできます。


1
スイッチで使用ESRIRegAddIn.exeして /s、アドインをサイレントインストールできます。私のマシンのESRIRegAddInへのパスはC:\Program Files (x86)\Common Files\ArcGIS\binです。
blah238
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.