From 3b0fa0c05d4a495c295de3a3216182727578d356 Mon Sep 17 00:00:00 2001 From: jack1142 <6032823+jack1142@users.noreply.github.com> Date: Tue, 22 Oct 2019 04:43:00 +0200 Subject: [PATCH] [Core/Downloader] Add 3rd-party lib folder to `sys.path` before loading cogs (#3062) * fix(core,downloader): add lib folder to sys.path before loading cogs * chore(changelog): add towncrier entry * fix(core): always append 3rd-party lib path to the end of `sys.path` --- changelog.d/3036.bugfix.rst | 1 + changelog.d/3062.bugfix.rst | 1 + redbot/__main__.py | 7 +++++++ redbot/cogs/downloader/downloader.py | 4 ---- 4 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 changelog.d/3036.bugfix.rst create mode 100644 changelog.d/3062.bugfix.rst diff --git a/changelog.d/3036.bugfix.rst b/changelog.d/3036.bugfix.rst new file mode 100644 index 000000000..29fc8ae1d --- /dev/null +++ b/changelog.d/3036.bugfix.rst @@ -0,0 +1 @@ +Add 3rd-party lib folder to ``sys.path`` before loading cogs. This prevents issues with 3rd-party cogs failing to load without loaded Downloader due to unavailable requirements. \ No newline at end of file diff --git a/changelog.d/3062.bugfix.rst b/changelog.d/3062.bugfix.rst new file mode 100644 index 000000000..5b4147525 --- /dev/null +++ b/changelog.d/3062.bugfix.rst @@ -0,0 +1 @@ +Always append 3rd-party lib folder to the end of ``sys.path`` to avoid shadowing Red's dependencies. \ No newline at end of file diff --git a/redbot/__main__.py b/redbot/__main__.py index 042294952..a195e26a4 100644 --- a/redbot/__main__.py +++ b/redbot/__main__.py @@ -119,6 +119,13 @@ def main(): init_global_checks(red) init_events(red, cli_flags) + # lib folder has to be in sys.path before trying to load any 3rd-party cog (GH-3061) + # We might want to change handling of requirements in Downloader at later date + LIB_PATH = data_manager.cog_data_path(raw_name="Downloader") / "lib" + LIB_PATH.mkdir(parents=True, exist_ok=True) + if str(LIB_PATH) not in sys.path: + sys.path.append(str(LIB_PATH)) + red.add_cog(Core(red)) red.add_cog(CogManagerUI()) if cli_flags.dev: diff --git a/redbot/cogs/downloader/downloader.py b/redbot/cogs/downloader/downloader.py index a7f85074c..d8a21d00d 100644 --- a/redbot/cogs/downloader/downloader.py +++ b/redbot/cogs/downloader/downloader.py @@ -43,15 +43,11 @@ class Downloader(commands.Cog): self.SHAREDLIB_PATH = self.LIB_PATH / "cog_shared" self.SHAREDLIB_INIT = self.SHAREDLIB_PATH / "__init__.py" - self.LIB_PATH.mkdir(parents=True, exist_ok=True) self.SHAREDLIB_PATH.mkdir(parents=True, exist_ok=True) if not self.SHAREDLIB_INIT.exists(): with self.SHAREDLIB_INIT.open(mode="w", encoding="utf-8") as _: pass - if str(self.LIB_PATH) not in syspath: - syspath.insert(1, str(self.LIB_PATH)) - self._repo_manager = RepoManager() async def initialize(self):