在 Python 中访问许可和扩展模块
每当在脚本中执行工具时,都会需要 ArcGIS 许可。此外,运行 ArcGIS 扩展模块中的工具,如 ArcGIS Spatial Analyst 扩展模块,也需要针对该模块的许可。如果无法获得必要的许可,工具将运行失败并返回错误消息。例如,如果您安装有 ArcGIS for Desktop Basic 的许可,并试图运行需要 Standard 或 Advanced 的许可,则工具将运行失败。
使用 ArcGIS for Desktop Basic 或 Standard 许可时,脚本应将产品设置为 Basic 或 Standard。同样,使用 Engine 或 EngineGeoDB 许可时,脚本应将产品设置为 Engine 或 EngineGeoDB。如果未明确设置许可,将根据首次访问 ArcPy 工具、函数或类时的最高可用许可等级初始化许可。
每种工具都将执行检查以确保具有相应的许可。如果不具有所需的许可,工具将运行失败。为避免脚本在执行到一半时失败,可以在脚本开头执行检查,以尽早发现失败。
 提示:
提示:只有在独立脚本中才必须设置产品和扩展模块。如果从 Python 窗口运行工具或者使用脚本工具,产品已在应用程序内进行设置,激活的扩展模块取决于“扩展模块”对话框。
Desktop、Engine/Server 许可
产品模块会在导入 arcpy 前导入,以定义脚本使用的 Desktop 许可。CheckProduct 函数可用于检查 Desktop 许可的可用性,而 ProductInfo 函数能报告当前的产品许可。
 法律声明:
法律声明:在导入 arcpy 前,首先应通过引入合适的产品模块(arcinfo、arceditor、arcview、arcserver、arcenginegeodb 或 arcengine)设置产品级别。SetProduct 函数是传统函数,一旦导入 arcpy 后将无法设置产品属性。
扩展模块许可
可以从许可管理器中获取扩展模块许可,并在不再需要时将其归还。CheckExtension 函数用于查看是否存在可为特定类型的扩展模块检出的许可,而 CheckOutExtension 会真正获取许可。脚本获取到扩展模块许可后,即可执行扩展模块工具。脚本使用完特定扩展模块中的工具后,应使用 CheckInExtension 函数将许可归还给许可管理器,以便其他应用程序使用。当脚本完成时,所有检出的扩展模块许可和设置的产品许可都将归还给许可管理器。
下面的示例将执行一些 ArcGIS 3D Analyst 工具,并将 Desktop 产品许可设置为 ArcGIS for Desktop Basic,因为执行扩展模块中的工具时不需要 ArcGIS for Desktop Advanced 的许可。如果未明确设置 ArcGIS for Desktop Basic 的许可,并且无可用的 ArcGIS for Desktop Advanced 许可,则脚本将失败,因为运行扩展模块工具需要 Desktop 许可。
class LicenseError(Exception):
    pass
# Set desktop license used to ArcGIS for Desktop Basic
#
import arcview
import arcpy
from arcpy import env
try:
    if arcpy.CheckExtension("3D") == "Available":
        arcpy.CheckOutExtension("3D")
    else:
        # Raise a custom exception
        #
        raise LicenseError
    
    env.workspace = "D:/GrosMorne"
    arcpy.HillShade_3d("WesternBrook", "westbrook_hill", 300)
    arcpy.Aspect_3d("WesternBrook", "westbrook_aspect")
except LicenseError:
    print "3D Analyst license is unavailable"  
except:
    print arcpy.GetMessages(2)
finally:
    # Check in the ArcGIS 3D Analyst 扩展模块
    #
    arcpy.CheckInExtension("3D")
上例中,ArcGIS 3D Analyst 扩展模块 通过 finally 子句检入,从而确保无论是否出现异常都会检回该扩展模块。
返回值 Failed、Unavailable 或 NotLicensed 表示无法成功检出扩展模块。
以下是扩展模块名称及其扩展编码名称:
| 扩展模块 | 扩展编码 | 
|---|---|
| ArcGIS 3D Analyst 扩展模块 | 3D | 
| 适用于 Desktop 的 ArcGIS Data Interoperability 扩展模块 | DataInteroperability | 
| ArcGIS Data Reviewer for Desktop | Datareviewer | 
| ArcGIS for Aviation:机场 | 机场 | 
| ArcGIS for Aviation:图表绘制 | Aeronautical | 
| ArcGIS for Maritime:Bathymetry | Bathymetry | 
| ArcGIS for Maritime:图表绘制 | Nautical | 
| ArcGIS Geostatistical Analyst 扩展模块 | GeoStats | 
| ArcGIS Network Analyst 扩展模块 | 网络 | 
| ArcGIS Spatial Analyst 扩展模块 | 空间 | 
| ArcGIS Schematics 扩展模块 | Schematics | 
| ArcGIS Tracking Analyst 扩展模块 | Tracking | 
| ArcGIS Workflow Manager for Desktop | JTX | 
| ArcScan | ArcScan | 
| Business Analyst | 商业 | 
| Esri Defense Mapping | 国防 | 
| Esri Production Mapping | Foundation | 
| Esri Roads and Highways | 高速公路 | 
| StreetMap | StreetMap | 
产品编码名称
| 产品编码 | 
|---|
| ArcView(等效于 ArcGIS for Desktop Basic 许可) | 
| ArcEditor(等效于 ArcGIS for Desktop Standard 许可) | 
| ArcInfo(等效于 ArcGIS for Desktop Advanced 许可) | 
| Engine | 
| EngineGeoDB | 
| ArcServer | 
许可函数
| 功能 | 说明 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CheckExtension(extension) | 检查是否存在可为特定类型的扩展模块检出的许可。 
 
 | ||||||||||||||||
| CheckInExtension(extension) | 归还许可以便其他应用程序使用。 
 
 | ||||||||||||||||
| CheckOutExtension(extension) | 获取许可。 
 
 | ||||||||||||||||
| CheckProduct(code) | 检查申请的许可是否可用。 
 
 | ||||||||||||||||
| ProductInfo() | 返回当前产品许可。 
 
 | ||||||||||||||||
| SetProduct(code) | 定义 Desktop 许可。 
 
 |