[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