pyblish-base icon indicating copy to clipboard operation
pyblish-base copied to clipboard

handle plugins that import another module, which is not in sys path

Open hannesdelbeke opened this issue 3 years ago • 2 comments

pyblish stores paths in a registered paths variable. It doesn't add module paths to the sys path. this results in plugins failing to load sometimes.

example:

We have the following files in a folder

my_plugin_folder:
-- __init__.py
-- pyblish_plugin.py
-- helper_functions.py

pyblish_plugin imports helper_functions But my_plugin_folder is not in our sys path. Loading pyblish_plugin will fail with module note found

possible solutions:

  • pyblish adds registered plugin paths to the system path. To handle situations where 2 plugins both contain a file named helper_functions.py we should always do import my_plugin_folder.helper_functions and not import helper_functions

  • discourage users from using import, and enforce that a plugin should be self contained. this however severly limits plugins

  • ask user to handle environment management themselves correctly, But this raises the entry bar for people who want to use pyblish. Ideally an artist can download pyblish, download some plugins, load them in pyblish, and it all just works.

hannesdelbeke avatar Jan 15 '22 14:01 hannesdelbeke

Automatically adding paths to the PYTHONPATH could break pipelines. But it does seems like a good solution for the Pyblish plugin marketplace platform. ideally the marketplace would download plugins to a single folder, and only that folder needs adding to your env vars.

this issue came to my attention since i currently have several repos, each containing indivual pyblish plugins, but not all repos are added to the PYTHONPATH this would not be an issue when you develop all plugins inhouse. since then you also handle env management. it's more for handling third party plugins.

hannesdelbeke avatar Jan 15 '22 15:01 hannesdelbeke

noticed there is a PYBLISHPLUGINPATH variable that does exactly this. but there isn't much documentation for this

  • https://api.pyblish.com/environment-variables/pyblishpluginpath

~~on first sight, it is not clear that a plugin might not work because of import issues. due to not having your env setup properly.~~ ~~this then results in a silent load, leaving the user confused. (but i registered the path, what is wrong?)~~ ~~this would show up in the console if the user enabled debug logging.~~ With the PR merged in addressing silent fail confusing this should show in console as an import exception

hannesdelbeke avatar Jan 23 '22 00:01 hannesdelbeke