AttributeErrorのデバッグ: 'module'オブジェクトにArcPyのPython Toolboxの属性 'Parameter'がありませんか?


8

大きな.pytスクリプト(pythonツールボックス)があり、それを多くのファイル(1ファイル-1ツール)に分割しようとしています。

単一の.pytファイルではすべてが完璧に機能しますが、ファイルが分割されると、次のメッセージが表示されます。AttributeError: 'module' object has no attribute 'Parameter'。

ファイルの構造:

My Catalog:
-- toolbox.pyt
-- toolpackage:
---- configurator.py
---- __init__.py

toolbox.pyt:

# This Python file uses the following encoding: utf-8

import arcpy

from toolpackage.configurator import ToolboxConfigurator

class Toolbox(object):
  def __init__(self):
    """Define the toolbox (the name of the toolbox is the name of the .pyt file)."""
    self.label = "label"
    self.alias = "Tools"

    # List of tool classes associated with this toolbox
    self.tools = [ToolboxConfigurator]

configurator.py:

# This Python file uses the following encoding: utf-8

import arcpy

class ToolboxConfigurator(object):

  def __init__(self):
    """Define the tool (tool name is the name of the class)."""
    self.label              = u"config"
    self.description        = u""
    self.canRunInBackground = False

  def getParameterInfo(self):
    """Define parameter definitions"""
    new_config_file   = arcpy.Parameter(
      displayName     = u"?",
      name            = "new_config_file",
      datatype        = "GPBoolean",
      parameterType   = "Optional",
      direction       = "Input")
    parameters = [new_config_file]
    return parameters

  def isLicensed(self):
    """Set whether tool is licensed to execute."""
    return True

  def updateParameters(self, parameters):
    """Modify the values and properties of parameters before internal validation
    is performed.  This method is called whenever a parameter has been changed."""
    return

  def updateMessages(self, parameters):
    """Modify the messages created by internal validation for each tool
    parameter.  This method is called after internal validation."""
    return

  def execute(self, parameters, messages):
    """The source code of the tool."""

__init__.py 明確です。

私のエラー:

Traceback (most recent call last):
  File "C:\tools_v4\toolpackage\configurator.py", line 15, in getParameterInfo
    new_config_file   = arcpy.Parameter(
AttributeError: 'module' object has no attribute 'Parameter'

私はあなたの構造に正確に従いました、そしてそれは私のために働きます。
DWynne、2015

2 DWynne、ソフトウェアのバージョンは何ですか?
Vladimir Ivanov

10.3を使用しています(ただし、別のバージョンを簡単に確認できました)。どのバージョンを使用していますか?
DWynne、2015

1
ArcGIS 10.3.1で同じ問題が発生しました。ArcGISによって作成されたすべてのXMLファイルをツールボックスフォルダーから削除し、ArcGISを再起動してツールを再実行しました(結果ウィンドウではなくクリックして)。まだランダムのようです。
Thomas

1
これは、正常に機能していた複数ファイルのarcpyサービスで、10.3.1でよく見られます。私は以前のバージョンをgitから戻し、完全に機能し、ディレクトリをクリーンアップし、サービスをクリアしましたが、それでも奇妙なランダムな問題が残っています。
CMPalmer 2015年

回答:


10

これは誰にとっても原因ではないかもしれませんが、少なくとも1セットのトリガーを特定しました。

  1. ArcCatalogからPythonツールボックスツールを実行する
  2. ジオプロセシング履歴がオンで、#1の結果が含まれています。
  3. 新しいArcCatalogセッションを開始すると、最初にジオプロセシングウィンドウ(ArcToolboxウィンドウ、Pythonウィンドウ、結果ウィンドウなど)が開きません。

上記がすべて当てはまる場合、PythonツールボックスツールはAttributeError: 'module' object has no attribute 'Parameter'例外を表示します。

履歴を消去する(またはログをまったく記録しない)と、問題が回避されます。おそらく、履歴を保持することがほとんどないため、これが表示されなかった理由です。

ツールボックスを右クリックして更新を使用すると、エラーはクリアされますが、上記のリストが正しい限り、将来再び表示されます。ただし、ツールが別のツールファイルからツールクラスをインポートしている場合(上記の場合のように)、更新は十分ではありません。そのためreload、.pytにa を含めて強制的に実行する必要があり、ツールボックスを更新するとエラーがクリアされました。

# Using example of toolbox.pyt above
import toolpackage.configurator  # add import
reload(toolpackage.configurator)  # add a forced reload
from toolpackage.configurator import ToolboxConfigurator

どうやらこのバグは10.6-でもまだ存在しています。pytの名前を変更すると、(一時的に)修正されたようです。reloadを使用して修正しただけでなく、コードを開発するときに更新を使用してArcCatalogを常に終了して再起動する必要がないようになりました。ありがとうございます。
ブライアンhウィルソン2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.