在ArcGIS中组织Python工具箱(.pyt)的准则


17

对于我的任务之一,我需要使用三个工具(python脚本)创建一个工具箱。

我决定将其写为Python Toolbox(pyt),而不是普通的tbx。

除了“良好”的组织代码方式之外,其他所有内容都很清楚。

由于我有三种工具,将它们存储在一个文件(pyt)中不是一种好方法。因此,我决定将每个工具都保存在单独的.py文件中。

这是一个问题:用PYT组织多个文件以在ArcGIS for Server上分发或部署的好方法是什么?我应该将它们与PYT文件保持在同一级别,还是应该将它们放置在某个子目录(即“工具”)中?

您可以推荐任何Esri准则或参考“大型PYT工具箱”示例吗?

我没有找到关于这个话题的任何东西。在10.0版中,我使用了所谓的ToolShare文件夹结构

这更多是一个编码风格的问题。因为用500-1000行或更多行代码创建一个PYT文件的想法在我看来并不好,我认为这不是“ pythonic”方式。


1
“用500-1000或更多行代码创建一个PYT文件的想法对我来说并不好”。你并不孤单,亚历克斯。今天,我迅速指出.pyt是精神病患者的发明。我不会后悔的。
RemigijusPankevičius2014年

Answers:


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文件之外,它会丢失所有脚本和程序包。可以将脚本手动放入部署中,但这会增加复杂性。
2013年

3
@G是的,卢克的想法也是我的经验。ESRI的发布服务无法识别任何from x import y样式导入。(顺便说一句,这完全是荒谬的。)但是,我相信您可以不理会self.tools定义并使用import toolpackage.script_a.Tool1 as Tool1
jpmc26 2014年

1
别名应该简短,并且只能包含字母,即self.alias =“ mtt”
Curtis Price

2
由于我只花了一个小时来更改我的工具代码,并试图将其反映在Arcmap的工具gui中,所以我想分享一下。如果您在pyt文件之外对代码进行更改,并希望将其反映在工具gui中,则必须重新启动ArcMap / Catalog。您可以按需要在工具箱上单击“刷新”,这似乎只能重新加载pyt本身。它不会找到对其他代码的更改。
TurboGus

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.