From 3bb59b5ac2ded20600252919fe907a42a6e92e90 Mon Sep 17 00:00:00 2001 From: Ellwood Zwovic Date: Wed, 2 Aug 2017 16:45:34 -0700 Subject: [PATCH] Use bpy.app.binary_path_python as subprocess interpreter --- package_manager/__init__.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/package_manager/__init__.py b/package_manager/__init__.py index d953d3a..8b438e4 100644 --- a/package_manager/__init__.py +++ b/package_manager/__init__.py @@ -44,6 +44,10 @@ else: import bpy from collections import OrderedDict +import multiprocessing + +mp_context = multiprocessing.get_context() +mp_context.set_executable(bpy.app.binary_path_python) # global list of all known packages, indexed by name _packages = OrderedDict() @@ -129,9 +133,8 @@ class SubprocMixin: self._state = 'QUIT' def invoke(self, context, event): - import multiprocessing - self.pipe_blender, self.pipe_subproc = multiprocessing.Pipe() + self.pipe_blender, self.pipe_subproc = mp_context.Pipe() # The subprocess should just be terminated when Blender quits. Without this, # Blender would hang while closing, until the subprocess terminates itself. @@ -183,14 +186,13 @@ class SubprocMixin: def abort(self): import time - # Allow the subprocess 10 seconds to repsond to our abort message. + # Allow the subprocess 10 seconds to respond to our abort message. self._abort_timeout = time.time() + 10 self._state = 'ABORTING' self.pipe_blender.send(messages.Abort()) def _finish(self, context): - import multiprocessing try: self.cancel(context) except AttributeError: @@ -268,7 +270,6 @@ class PACKAGE_OT_install(SubprocMixin, bpy.types.Operator): :rtype: multiprocessing.Process """ - import multiprocessing self.msg_handlers = { messages.Progress: self._subproc_progress, @@ -289,7 +290,7 @@ class PACKAGE_OT_install(SubprocMixin, bpy.types.Operator): self.log.debug("Using %s as install path", install_path) import addon_utils - proc = multiprocessing.Process(target=subproc.download_and_install_package, + proc = mp_context.Process(target=subproc.download_and_install_package, args=(self.pipe_subproc, package, install_path)) return proc @@ -356,7 +357,7 @@ class PACKAGE_OT_uninstall(SubprocMixin, bpy.types.Operator): global _packages package = _packages[self.package_name].get_latest_version() - proc = multiprocessing.Process(target=subproc.uninstall_package, + proc = mp_context.Process(target=subproc.uninstall_package, args=(self.pipe_subproc, package, install_path)) return proc @@ -465,7 +466,7 @@ class PACKAGE_OT_refresh_repositories(SubprocMixin, bpy.types.Operator): storage_path = pathlib.Path(bpy.utils.user_resource('CONFIG', 'packages', create=True)) repository_url = self.repolist[0].url - proc = multiprocessing.Process(target=subproc.refresh_repository, + proc = mp_context.Process(target=subproc.refresh_repository, args=(self.pipe_subproc, storage_path, repository_url)) return proc