I'm not sure what I'm doing wrong with arcpy.ImportToolbox() in ArcGIS Pro 2.9. No matter what I do, it always errors with
OSError: The toolbox file C:\temp\MyToolbox.pyt was not found.
There's not much to it besides calling arcpy.ImportToolbox(). What am I missing?
Does it have an alias?
ImportToolbox—ArcGIS Pro | Documentation
If the toolbox does not have an alias, the module_name is required.
See the example
What is a Python toolbox?—ArcGIS Pro | Documentation
Thanks Dan. It does have an alias.
While double checking, I decided to check something else and I think I found the problem. I'm importing separate .py files into my Python toolbox (like the Spatial Analyst Supplemental Tools). I took that part out and it seems to import fine.
Ultimately what I'm trying to do is have a Python toolbox with some basic utility functions used by many tools. Each tool is saved as a separate .py file and imported into the Python toolbox. I would like to be able to call functions defined in the Python Toolbox from the separate, imported .py scripts. Testing arcpy.ImportToolbox() was just the first step.
And to clarify further, I currently have the utility functions in their own .py file that is imported into each individual tool's .py file. This is working, but I'd like it to be in the Python toolbox .pyt file so I can encrypt it.
I don't have that problem with "custom" toolboxes. It may be a solution. Although, I tend to have my own *.py file imported by the toolbox, which may contain esri tools, rather than importing them directly
Here's sample code that worked in ArcMap, but I have not tested in Pro.
# standard python toolbox formatting for your utility toolbox
# C:/path/to/this/toolbox.pyt
class Toolbox(object):
def __init__(self):
self.label = 'your label'
self.alias = 'some_alias'
self.tools = [tool1, tool2, tool3]
# later on when you want to call them, e.g. from another .pyt
ImportToolbox(input_file='C:/path/to/this/toolbox.pyt')
arcpy.some_alias.tool1(arg1, arg2, ...)
arcpy.some_alias.tool2(arg1, ...)
arcpy.some_alias.tool3(arg1, ...)