Python でのライセンスおよびエクステンションへのアクセス

ツールをスクリプトから実行する場合は、必ず ArcGIS Desktop ライセンスが必要です。ArcGIS Spatial Analyst など、ArcGIS のエクステンション ツールを使用するには、そのエクステンションの追加ライセンスが必要です。必要なライセンスがない場合、ツールの実行は失敗し、エラー メッセージが返されます。たとえば、インストールに ArcView ライセンスをインストールした場合に、ArcEditor または ArcInfo のライセンス用に設定されたツールを実行しようとすると、そのツールの実行は失敗します。

ArcView または ArcEditor のライセンスを使用する場合は、スクリプト上で製品を ArcView または ArcEditor に設定する必要があります。同様に、Engine または EngineGeoDB のライセンスを使用する場合は、スクリプト上で製品を Engine または EngineGeoDB に設定する必要があります。ライセンスが明示的に設定されていない場合は、ArcPy のツール、関数、またはクラスに初めてアクセスするときに、使用可能な最上位のライセンス レベルに基づいてライセンスが初期化されます。

適切なライセンスが存在するかどうかのチェックは、すべてのツールで行われます。必要なライセンスがない場合、ツールの実行は失敗します。途中まで実行した後で失敗するという状況を避けるために、スクリプトの先頭でチェックを実行しておけば、失敗した場合にただちに終了できます。

ヒントヒント:

製品とエクステンションの設定は、スタンドアロン スクリプト内でのみ必要です。Python ウィンドウからツールを実行する場合や、スクリプト ツールを使用する場合は、製品はアプリケーション内ですでに設定されており、アクティブなエクステンションは [エクステンション] ダイアログ ボックスに基づいて決められます。

デスクトップ、エンジン/サーバのライセンス

arcpy をインポートする前に製品モジュールがインポートされ、スクリプトによって使用されるデスクトップ ライセンスが定義されます。CheckProduct 関数を使用してデスクトップ ライセンスが使用可能かどうか確認できるほか、ProductInfo 関数を使用すると現在の製品ライセンス情報が報告されます。

レガシレガシ:

arcpy をインポートする前に、該当する製品モジュール(arcinfoarceditorarcviewarcserverarcenginegeodbarcengine)をインポートして、製品レベルを設定する必要があります。SetProduct 関数はレガシー関数であり、arcpy がインポートされた後は製品を設定できなくなります。

エクステンション ライセンス

エクステンションのライセンスはライセンス マネージャから取得でき、不要になったときは返却できます。特定のタイプのエクステンションについてライセンスがチェックアウト可能かどうか調べるには CheckExtension を使用し、CheckOutExtension はライセンスを実際に取得します。スクリプトでエクステンション ライセンスを取得した後、エクステンション ツールを実行できます。スクリプトが特定のエクステンションからのツールを使用し終わったら、CheckInExtension 関数を使用してライセンス マネージャにライセンスを返却し、他のアプリケーションがそのライセンスを使用できるようにします。チェックアウトされたエクステンション ライセンスと、設定された製品ライセンスはすべて、スクリプトが完了するとライセンス マネージャに返却されます。

次の例では、いくつかの ArcGIS 3D Analyst ツールを実行し、デスクトップ製品ライセンスを ArcView に設定します。これは、エクステンションからのツールを実行するために ArcInfo ライセンスが必要ないからです。エクステンション ツールを実行するにはデスクトップ ライセンスが必要なので、ArcView ライセンスが明示的に設定されておらず ArcInfo ライセンスも使用できない場合は、スクリプトの実行は失敗します。

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 Extension が finally 節でチェックインされており、これにより、このエクステンションは例外が発生したかどうかに関係なく常にチェックインし、戻されます。

FailedUnavailable、または NotLicensed の値が返された場合は、エクステンションのチェックアウトが正常に行われなかったことを示しています。

次に、エクステンションの名前とエクステンション コード名を示します。

エクステンション

エクステンション コード

3D Analyst

3D

ArcGIS Schematics

Schematics

ArcScan

ArcScan

Business Analyst

Business

Data Interoperability

DataInteroperability

Geostatistical Analyst

GeoStats

ArcGIS Workflow Manager

JTX

Network Analyst

Network

Esri Aeronautical Solution

Aeronautical

Esri Defense Mapping

Defense

Esri Production Mapping

Foundation

ArcGIS Data Reviewer

Datareviewer

Esri Nautical Solution

Nautical

Spatial Analyst

Spatial

StreetMap

StreetMap

Tracking Analyst

Tracking

製品コード名

製品コード

ArcInfo

ArcEditor

ArcView

Engine

EngineGeoDB

ArcServer

ライセンス関数

関数

説明

CheckExtension(extension)

特定のタイプのエクステンションについてライセンスがチェックアウト可能かどうか調べます。

リターン

意味

Available

リクエストされたライセンスは設定可能です。

Unavailable

リクエストされたライセンスは設定できません。

NotLicensed

リクエストされたライセンスは有効ではありません。

Failed

リクエスト時にシステム エラーが発生しました。

CheckInExtension(extension)

他のアプリケーションが使用できるようにライセンスを返却します。

リターン

意味

NotInitialized

デスクトップ ライセンスが設定されていません。

Failed

リクエスト時にシステム エラーが発生しました。

CheckedIn

ライセンスは正常に返却されました。

CheckOutExtension(extension)

ライセンスを取得します。

リターン

意味

NotInitialized

デスクトップ ライセンスが設定されていません。

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)

デスクトップ ライセンスを定義します。

リターン

意味

CheckedOut

ライセンスが正常に設定されました。

AlreadyInitialized

ライセンスはスクリプト内にすでに設定済みです。

NotLicensed

リクエストされたライセンスは有効ではありません。

Failed

リクエスト時にシステム エラーが発生しました。


7/10/2012