pyblish / pyblish-base

Pyblish base library - see https://github.com/pyblish/pyblish for details.
Other
127 stars 59 forks source link

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

Open hannesdelbeke opened 2 years ago

hannesdelbeke commented 2 years ago

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:

hannesdelbeke commented 2 years ago

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 commented 2 years ago

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

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