编辑脚本后重新编译Python Addin?


15

我一直在开发一些python插件,但我想知道什么是在我每次编辑脚本时重新编译插件的最佳方法。

当前,如果我对脚本进行编辑,看来我必须

  1. 关闭ArcMap
  2. 转到“我的插件”文件夹,然后双击“ makeaddin” python文件
  3. 双击“ Python加载项文件
  4. 重新启动ArcMap,以使更改生效

如果我不执行这些步骤,则无法识别编辑。当我想在某处放置一条简单的打印行,或者我只是为了测试结果而做一些小的编辑时,这变得非常烦人和耗时。

有更好的方法吗?

Answers:


11

您可以reload在python中使用内置函数来自动重新加载模块。您可以执行以下操作:

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 2013年

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,不,这是一个单独的.py文件,位于makeaddin.py目录中
Paul

很棒的剧本。但是,正如预期的那样,当脚本尝试在ArcMap外部打开.mxd文件时,ArcMap就会崩溃。是否有已知的解决方法?
TheLastGIS 2015年

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网站上收到了答案。显然,这是重新编译python插件的唯一方法。有人在ArcGIS Ideas上记录了一个想法,我也投票赞成并发表了评论。

ArcGIS Discussion Forum线程位于此处


1
您可以在答案中添加相关链接吗?
blah238

我想投票,但找不到@Mike提到的ArcGIS Idea。
PolyGeo

抱歉,直到现在我才看到此回复。感谢@PolyGeo更新了到ArcGIS网站的链接。
Mike

1

我通常使用两种方法:一种是,对于您使用的实际上只是地理处理的任何工具,允许将它们导入,然后您可以设置一个交互式Python会话,并reload(mymodule)按照提及的方式进行操作以包括最新的更改(或设置IPython中的autoreload)。如果您只是对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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.