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

每当在脚本中执行工具时,都会需要 ArcGIS 许可。此外,对于 ArcGIS 扩展模块,如 ArcGIS Spatial Analyst 扩展模块,也需要针对该模块的许可。如果无法获得必要的许可,工具将运行失败并返回错误消息。例如,如果您安装有 ArcGIS for Desktop Basic 的许可,并试图运行需要 标准版高级版 的许可,则工具将运行失败。

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

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

提示提示:

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

Desktop、Engine/Server 许可

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

法律声明法律声明:

产品级别应通过在导入 arcpy 前,先导入相应的产品模块(arcinfoarceditorarcviewarcserverarcenginegeodb、或 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 子句检入,从而确保无论是否出现异常都会检回该扩展模块。

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

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

扩展模块

扩展编码

ArcGIS 3D Analyst 扩展模块

3D

ArcGIS Schematics 扩展模块

Schematics

ArcScan

ArcScan

Business Analyst

商业

适用于 Desktop 的 ArcGIS Data Interoperability 扩展模块

DataInteroperability

ArcGIS Geostatistical Analyst 扩展模块

GeoStats

适用于 Desktop 的 ArcGIS Workflow Manager 扩展模块

JTX

ArcGIS Network Analyst 扩展模块

网络

Esri Aeronautical Solution

Aeronautical

Esri Defense Mapping

国防

Esri Production Mapping

Foundation

适用于 Desktop 的 ArcGIS Data Reviewer 扩展模块

Datareviewer

Esri Nautical Solution

Nautical

Esri Bathymetry

Nauticalb

ArcGIS Spatial Analyst 扩展模块

空间

StreetMap

StreetMap

ArcGIS Tracking Analyst 扩展模块

Tracking

产品编码名称

产品编码

ArcView(等效于 ArcGIS for Desktop Basic 许可)

ArcEditor(等效于 ArcGIS for Desktop Standard 许可)

ArcInfo(等效于 ArcGIS for Desktop Advanced 许可)

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

已设置 ArcGIS for Desktop Advanced 许可。

ArcEditor

已设置 ArcGIS for Desktop Standard 许可。

ArcView

已设置 ArcGIS for Desktop Basic 许可。

ArcServer

已设置 ArcGIS for Server 许可。

EngineGeoDB

已设置 EngineGeoDB 许可。

Engine

已设置 Engine 许可。

SetProduct(code)

定义 Desktop 许可。

返回值

含义

CheckedOut

成功设置许可。

AlreadyInitialized

已在脚本中设置许可。

NotLicensed

请求的许可无效。

Failed

请求期间发生系统失败。

9/15/2013