在 Python 中访问许可和扩展模块

每当在脚本中执行工具时,都会需要 ArcGIS Desktop 许可。此外,ArcGIS 扩展模块(如 ArcGIS Spatial Analyst)中的工具还需要针对该模块的许可。如果无法获得必要的许可,工具将运行失败并返回错误消息。例如,如果您安装有 ArcView 级别的许可,却试图运行需要 ArcEditor 或 ArcInfo 许可级别的工具,则工具将运行失败。

使用 ArcView 或 ArcEditor 级别的许可时,脚本应将产品设置为 ArcView 或 ArcEditor。同样,使用 Engine 或 EngineGeoDB 许可时,脚本应将产品设置为 Engine 或 EngineGeoDB。如果未明确设置许可,将根据首次访问 ArcPy 工具、函数或类时的最高可用许可等级初始化许可。

每种工具都将执行检查以确保具有相应的许可。如果不具有所需的许可,工具将运行失败。为避免脚本在执行到一半时失败,可以在脚本开头执行检查,以尽早发现失败问题。

提示提示:

只有在独立脚本中才必须设置产品和扩展模块。如果从 Python 窗口运行工具或者使用脚本工具,产品已在应用程序内进行设置,激活的扩展模块取决于“扩展模块”对话框。

Desktop、Engine/Server 许可

产品模块会在导入 arcpy 前导入,以定义脚本使用的 Desktop 许可。CheckProduct 函数可用于检查 Desktop 许可的可用性,而 ProductInfo 函数能报告当前的产品许可。

旧版本旧版本:

产品级别应通过在导入 arcpy 前,先导入相应的产品模块(arcinfoarceditorarcviewarcserverarcenginegeodbarcengine)进行设置。SetProduct 函数是遗留函数,导入 arcpy 后将无法设置产品。

扩展模块许可

可以从许可管理器中获取扩展模块许可,并在不再需要时将其归还。CheckExtension 函数用于查看是否存在可为特定类型的扩展模块检出的许可,而 CheckOutExtension 会真正获取许可。脚本获取到扩展模块许可后,即可执行扩展模块工具。脚本使用完特定扩展模块中的工具后,应使用 CheckInExtension 函数将许可归还给许可管理器,以便其他应用程序使用。当脚本完成时,所有检出的扩展模块许可和设置的产品许可都将归还给许可管理器。

下面的示例将执行一些 ArcGIS 3D Analyst 工具并将 Desktop 产品许可设置为 ArcView 的级别,因为执行扩展模块中的工具时不需要 ArcInfo 许可。如果未明确设置 ArcView 许可并且没有可用的 ArcInfo 许可,则脚本将失败,因为运行扩展模块工具需要 Desktop 许可。

class LicenseError(Exception):
    pass

# Set desktop license used to ArcView
#
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 3D Analyst extension
    #
    arcpy.CheckInExtension("3D")

上例中,3D Analyst 扩展模块通过 finally 子句检入,从而确保无论是否出现异常都会检回该扩展模块。

返回值 FailedUnavailableNotLicensed 表示无法成功检出扩展模块。

以下是扩展模块名称及其扩展编码名称:

扩展模块

扩展编码

3D Analyst

3D

ArcGIS Schematics

Schematics

ArcScan

ArcScan

Business Analyst

Business

Data Interoperability

DataInteroperability

Geostatistical Analyst

GeoStats

ArcGIS Workflow Manager

JTX

Network Analyst

网络

Esri Aeronautical Solution

Aeronautical

Esri Defense Mapping

Defense

Esri Production Mapping

Foundation

ArcGIS Data Reviewer

Datareviewer

Esri Nautical Solution

Nautical

Spatial Analyst

空间

StreetMap

StreetMap

Tracking Analyst

Tracking

产品编码名称

产品编码

ArcInfo

ArcEditor

ArcView

Engine

EngineGeoDB

ArcServer

许可函数

功能

说明

CheckExtension(extension)

检查是否存在可为特定类型的扩展模块检出的许可。

返回值

含义

Available

请求的许可存在,可以设置。

Unavailable

请求的许可不存在,无法设置。

NotLicensed

请求的许可无效。

Failed

请求期间发生系统失败。

CheckInExtension(extension)

归还许可以便其他应用程序使用。

返回值

含义

NotInitialized

尚未设置任何 Desktop 许可。

Failed

请求期间发生系统失败。

CheckedIn

已成功返回许可。

CheckOutExtension(extension)

获取许可。

返回值

含义

NotInitialized

尚未设置任何 Desktop 许可。

Unavailable

请求的许可不存在,无法设置。

CheckedOut

成功设置许可。

CheckProduct(code)

检查请求的许可是否可用。

返回值

含义

AlreadyInitialized

已在脚本中设置许可。

Available

请求的许可存在,可以设置。

Unavailable

请求的许可不存在,无法设置。

NotLicensed

请求的许可无效。

Failed

请求期间发生系统失败。

ProductInfo()

返回当前产品许可。

返回值

含义

NotInitialized

尚未设置任何许可。

ArcInfo

已设置 ArcInfo 许可。

ArcEditor

已设置 ArcEditor 许可。

ArcView

已设置 ArcView 许可。

ArcServer

已设置 ArcGIS Server 许可。

EngineGeoDB

已设置 EngineGeoDB 许可。

Engine

已设置 Engine 许可。

SetProduct(code)

定义 Desktop 许可。

返回值

含义

CheckedOut

成功设置许可。

AlreadyInitialized

已在脚本中设置许可。

NotLicensed

请求的许可无效。

Failed

请求期间发生系统失败。


7/10/2012