[Bf-blender-cvs] [a8ca79cbe69] blender-v2.91-release: Revert "PyAPI: point sys.executable to the Python binary"

Campbell Barton noreply at git.blender.org
Wed Oct 28 09:42:40 CET 2020


Commit: a8ca79cbe694ee7639343695d6367d30cb2ab589
Author: Campbell Barton
Date:   Wed Oct 28 19:40:48 2020 +1100
Branches: blender-v2.91-release
https://developer.blender.org/rBa8ca79cbe694ee7639343695d6367d30cb2ab589

Revert "PyAPI: point sys.executable to the Python binary"

This reverts commit 04c5471ceefb41c9e49bf7c86f07e9e7b8426bb3.

This causes Blender not to start on some systems.

===================================================================

M	release/scripts/modules/sys_info.py
M	source/blender/python/intern/bpy_app.c
M	source/blender/python/intern/bpy_interface.c

===================================================================

diff --git a/release/scripts/modules/sys_info.py b/release/scripts/modules/sys_info.py
index cb80529f0f3..fc3ffe4dd88 100644
--- a/release/scripts/modules/sys_info.py
+++ b/release/scripts/modules/sys_info.py
@@ -82,10 +82,10 @@ def write_sysinfo(filepath):
                 output.write("\t%r\n" % p)
 
             output.write(title("Python (External Binary)"))
-            output.write("binary path: %s\n" % prepr(sys.executable))
+            output.write("binary path: %s\n" % prepr(bpy.app.binary_path_python))
             try:
                 py_ver = prepr(subprocess.check_output([
-                    sys.executable,
+                    bpy.app.binary_path_python,
                     "--version",
                 ]).strip())
             except Exception as e:
diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c
index 8354e220b09..554ab2645a7 100644
--- a/source/blender/python/intern/bpy_app.c
+++ b/source/blender/python/intern/bpy_app.c
@@ -292,13 +292,36 @@ static int bpy_app_global_flag_set__only_disable(PyObject *UNUSED(self),
   return bpy_app_global_flag_set(NULL, value, closure);
 }
 
+#define BROKEN_BINARY_PATH_PYTHON_HACK
+
 PyDoc_STRVAR(bpy_app_binary_path_python_doc,
-             "String, the path to the python executable (read-only). "
-             "Deprecated! Use ``sys.executable`` instead.");
-static PyObject *bpy_app_binary_path_python_get(PyObject *UNUSED(self), void *UNUSED(closure))
+             "String, the path to the python executable (read-only)");
+static PyObject *bpy_app_binary_path_python_get(PyObject *self, void *UNUSED(closure))
 {
-  PyErr_Warn(PyExc_RuntimeWarning, "Use 'sys.executable' instead of 'binary_path_python'!");
-  return Py_INCREF_RET(PySys_GetObject("executable"));
+  /* refcount is held in BlenderAppType.tp_dict */
+  static PyObject *ret = NULL;
+
+  if (ret == NULL) {
+    /* only run once */
+    char fullpath[1024];
+    BKE_appdir_program_python_search(
+        fullpath, sizeof(fullpath), PY_MAJOR_VERSION, PY_MINOR_VERSION);
+    ret = PyC_UnicodeFromByte(fullpath);
+#ifdef BROKEN_BINARY_PATH_PYTHON_HACK
+    Py_INCREF(ret);
+    UNUSED_VARS(self);
+#else
+    PyDict_SetItem(
+        BlenderAppType.tp_dict,
+        /* XXX BAAAADDDDDD! self is not a PyDescr at all! it's bpy.app!!! */ PyDescr_NAME(self),
+        ret);
+#endif
+  }
+  else {
+    Py_INCREF(ret);
+  }
+
+  return ret;
 }
 
 PyDoc_STRVAR(bpy_app_debug_value_doc,
diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c
index 894a9a69198..c4523363a91 100644
--- a/source/blender/python/intern/bpy_interface.c
+++ b/source/blender/python/intern/bpy_interface.c
@@ -306,22 +306,12 @@ void BPY_python_start(bContext *C, int argc, const char **argv)
   PyThreadState *py_tstate = NULL;
   const char *py_path_bundle = BKE_appdir_folder_id(BLENDER_SYSTEM_PYTHON, NULL);
 
-  /* Setting the program name is important so the 'multiprocessing' module
-   * can launch new Python instances. */
+  /* Not essential but nice to set our name. */
   {
-    char program_path[FILE_MAX];
-    if (BKE_appdir_program_python_search(
-            program_path, sizeof(program_path), PY_MAJOR_VERSION, PY_MINOR_VERSION)) {
-      wchar_t program_path_wchar[FILE_MAX];
-      BLI_strncpy_wchar_from_utf8(
-          program_path_wchar, program_path, ARRAY_SIZE(program_path_wchar));
-      Py_SetProgramName(program_path_wchar);
-    }
-    else {
-      fprintf(stderr,
-              "Unable to find the python binary, "
-              "the multiprocessing module may not be functional!\n");
-    }
+    const char *program_path = BKE_appdir_program_path();
+    wchar_t program_path_wchar[FILE_MAX];
+    BLI_strncpy_wchar_from_utf8(program_path_wchar, program_path, ARRAY_SIZE(program_path_wchar));
+    Py_SetProgramName(program_path_wchar);
   }
 
   /* must run before python initializes */



More information about the Bf-blender-cvs mailing list