Open hannesdelbeke opened 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.
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
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
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 notimport 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.