Python is used in many parts of ArcGIS AllSource. Integrated development environments (IDEs) are applications that provide editing and debugging functionality for code writers. IDEs make the writing and troubleshooting of code more efficient. Python IDEs can be used to author and troubleshoot script tool and Python toolbox validation and source code.
Microsoft Visual Studio
The following ArcGIS AllSource components can be debugged in Visual Studio:
- Script tool source code
- Script tool validation
- Python toolboxes
The following Visual Studio workload must be installed: Python development. See https://docs.microsoft.com/en-us/visualstudio/install/modify-visual-studio.
To start debugging Python code in ArcGIS AllSource, complete the following steps:
- In ArcGIS AllSource, open the Geoprocessing pane of the tool to be debugged.
The Python window and any notebooks must be closed.
- Start Microsoft Visual Studio and open the script to be debugged.
- On the main menu, click Debug > Attach to Process.
- On the Attach to Process dialog box, click the Select button.
- On the Select Code Type dialog box, check Debug these code types, check Python, and click OK.
You must choose Attach to: Python code. Do not use the default code type of Automatic: Managed (v4.6, v4.5, v4.0) code, Python code.
- In the list of available processes, click the ArcGISPro.exe process and click the Attach button.
- Run your tool in ArcGIS AllSource to start debugging.
After detaching the IDE from ArcGIS AllSource, exceptions in Python code will not display correctly. To address this, reattach the IDE or restart ArcGIS AllSource.
Note:
Microsoft Visual Studio 2017 can be used to debug ArcGIS AllSource 2.1 and later. Earlier versions of either of these applications will not work.
PyCharm Professional edition
The following ArcGIS AllSource components can be debugged in PyCharm Professional edition:
- Script tool source code
- Script tool validation
pdb module
The pdb module is part of the Python standard library. It is not a fully developed IDE, but it can be used for interactive source code debugging. The pdb module cannot be used to debug within ArcGIS AllSource, but it can be used to debug stand-alone scripts, including the source code for script tools.
Using the pdb module is useful for debugging a script tool's source code running in a stand-alone Python script. Add a breakpoint (using import pdb;pdb.set_trace()) into your script tool's code, and run a Python script that calls that script tool. Upon encountering the breakpoint, Python will enter interactive mode. Remember to remove the breakpoint code upon completion of the debugging effort.
Debug script tool validation code
Python code in the script tool validation is embedded in the tool and needs to be copied to an external Python file (.py) to debug it. You can then open the Python file in your IDE and set breakpoints, attach the IDE to ArcGIS AllSource, and run your script tool. Upon completion of code modification, copy the contents of the Python file back into the tool validation.
In the following example, val.py contains the ToolValidator class and is saved to the same directory as the toolbox.
import sys
import val
# the following code will reload the val.py module if it's modified
if 'val' in sys.modules:
import importlib
importlib.reload(val)
# ToolValidator should exist at the global scope
ToolValidator = val.ToolValidator
The validation code in script tool validation is run repeatedly as a user interacts with a tool.
Debug Python toolboxes
You cannot debug a Python toolbox (.pyt) directly, instead it must be debugged using a Python file (.py). Follow these steps to debug a Python toolbox:
- Create an external Python file within the same directory as the Python toolbox.
- Copy the code within the execute function of the Python toolbox and paste it into a function func() in the new Python file. Copy over any other necessary functions.
- Replace the code in the Python toolbox execute function with the following:
- Open the Python file in Visual Studio and set breakpoints using the steps above to debug the Python toolbox.
import execute_code
execute_code.func(parameters)
The following code is an example of the execute function in the Python toolbox and the separate Python file being called.
In the following example, runCode.py is saved to the same directory as a .pyt file.
import arcpy
def func(parameters):
arcpy.AddMessage("This is where your code goes.")
return
The following is an example of the modified execute function in a Python toolbox.
def execute(self, parameters, messages):
"""The source code of the tool."""
import runCode
runCode.func(parameters)
return
Upon completion of code modification, copy the contents of the Python file back into the tool's execute function.