Debuggen von AttributeError: Das Objekt 'module' hat kein Attribut 'Parameter' aus der Python Toolbox von ArcPy?

8

Ich habe ein großes .pyt-Skript (Python-Toolbox) und jetzt versuche ich, es in viele Dateien aufzuteilen (1 Datei - 1 Tool).

In einer einzelnen .pyt-Datei funktioniert alles perfekt, aber wenn die Datei aufgeteilt wird, wird folgende Meldung angezeigt: AttributeError: Das Objekt 'module' hat kein Attribut 'Parameter'.

Struktur der Dateien:

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]

configure.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 ist klar.

Mein Fehler:

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'
Vladimir Ivanov
quelle
Ich habe Ihre Struktur genau befolgt und es funktioniert für mich.
DWynne
2 DWynne, was ist die Version Ihrer Software?
Vladimir Ivanov
Ich bin auf 10.3 (aber ich könnte leicht genug gegen eine andere Version prüfen). Welche Version verwenden Sie?
DWynne
1
Das gleiche Problem mit ArcGIS 10.3.1 wurde behoben, indem alle von ArcGIS erstellten XML-Dateien im Toolbox-Ordner gelöscht, ArcGIS neu gestartet und das Tool erneut ausgeführt wurden (nicht im Ergebnisfenster, sondern durch Klicken darauf). Scheint immer noch irgendwie zufällig zu sein.
Thomas
1
Ich sehe dies unter 10.3.1 häufig bei Arcpy-Diensten mit mehreren Dateien, die gut funktioniert haben. Ich habe frühere Versionen von git zurückgezogen, die perfekt funktionierten, das Verzeichnis bereinigt, die Dienste gelöscht und habe immer noch seltsam zufällige Probleme.
CMPalmer

Antworten:

10

Dies ist möglicherweise nicht die Ursache für alle, aber ich habe mindestens einen Satz von Auslösern identifiziert.

  1. Führen Sie das Python-Toolbox-Tool in ArcCatalog aus
  2. Der Geoverarbeitungsverlauf ist aktiviert und enthält ein Ergebnis von # 1.
  3. Beim Starten einer neuen ArcCatalog-Sitzung sind zunächst keine Geoverarbeitungsfenster geöffnet (z. B. ArcToolbox-Fenster, Python-Fenster, Ergebnisfenster).

Wenn alle oben genannten Punkte zutreffen, zeigt das Python-Toolbox-Tool die AttributeError: 'module' object has no attribute 'Parameter'Ausnahme an.

Durch Löschen des Verlaufs (oder gar nicht protokollieren) wird das Problem vermieden, wahrscheinlich, weil ich dies vorher nicht gesehen habe, da ich meinen Verlauf selten behalte.

Wenn Sie mit der rechten Maustaste auf die Toolbox klicken und "Aktualisieren" verwenden, wird der Fehler behoben. Er wird jedoch in Zukunft erneut angezeigt, solange die obige Liste weiterhin gültig ist. Wenn das Tool die Toolklasse jedoch aus einer separaten Tooldatei importiert (wie im obigen Fall), reicht eine Aktualisierung nicht aus. Dafür musste ich es erzwingen, indem ich ein reloadin die .pyt einfügte, und dann wird der Fehler durch eine Aktualisierung der Toolbox behoben.

# Using example of toolbox.pyt above
import toolpackage.configurator  # add import
reload(toolpackage.configurator)  # add a forced reload
from toolpackage.configurator import ToolboxConfigurator
DWynne
quelle
Anscheinend existiert dieser Fehler immer noch um 10.6 - er hat mich verrückt gemacht; Das Umbenennen des Pyt schien es (vorübergehend) zu beheben. Durch das erneute Laden wurde nicht nur das Problem behoben, sondern ich kann jetzt die Aktualisierung verwenden, um zu vermeiden, dass ArcCatalog bei der Entwicklung von Code ständig beendet und neu gestartet werden muss. DANKE !!
Brian H. Wilson