I have two ArcGIS python scripts. One is a primary python script that calls a number of functions from a second python script. Everything works well, i.e. primary tool calls and uses functions from a second script, when the two scripts are placed in the same directory and the primary python script is NOT embedded into python toolbox. However when the primary python script gets embedded into ArcGIS toolbox, the second script cannot be access any more by the primary script and therefore cannot be imported into the primary script as a module and functions cannot be used.
The work around would be to copy over all functions from the second script to the primary script or to copy second script into the toolbox directory but that is not the proper way to solve this issue.
Is it possible within ArcGIS to embed a script into a python toolbox with other scripts that are used by the primary script?
Answer
This is an issue with how python works. When you import a module, it will search for it in the built-in modules, the paths in sys.path
and finally, the current working directory (Python Module Search Path).
You've already noticed that adding your second script to the same directory as the toolbox will allow your first, embedded script to import it. This is because you've put it in the working directory. Your other options are making it available to python in other ways (detailed in the docs I linked): Modifying sys.path
from within the embedded script or creating/modifying the PYTHONPATH
environment variable.
My guess is that ArcGIS simply stores the embedded python as text and executes it when needed. It has no way of knowing dependencies or what extra modules are imported. You would have this same problem if you used other 3rd party modules that were not part of the default installation.
No comments:
Post a Comment