Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-04-18 12:27:50 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-04-18 12:27:50 +0400
commit0814cdf54ec9a0440c82d0d7ec81b8dc9ecc93ea (patch)
tree2875bf7d64fb77d26e2db2dff380efd83027e06a /source
parent75e1104d92002a79a5363d27f151c45574f93ecc (diff)
fix [#26951] blenderplayer and runtimes will not load
blenderplayer wasn't finding bundled python, eg: ./2.57/python/lib
Diffstat (limited to 'source')
-rw-r--r--source/blender/python/generic/py_capi_utils.c44
-rw-r--r--source/blender/python/generic/py_capi_utils.h2
-rw-r--r--source/blender/python/intern/bpy_interface.c49
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.cpp4
4 files changed, 52 insertions, 47 deletions
diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c
index 7182d5f75d0..de9bfb4013b 100644
--- a/source/blender/python/generic/py_capi_utils.c
+++ b/source/blender/python/generic/py_capi_utils.c
@@ -30,6 +30,8 @@
#include "py_capi_utils.h"
+#include "BKE_font.h" /* only for utf8towchar, should replace with py funcs but too late in release now */
+
#define PYC_INTERPRETER_ACTIVE (((PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current)) != NULL)
/* for debugging */
@@ -284,6 +286,48 @@ void PyC_MainModule_Restore(PyObject *main_mod)
Py_XDECREF(main_mod);
}
+/* must be called before Py_Initialize, expects output of BLI_get_folder(BLENDER_PYTHON, NULL) */
+void PyC_SetHomePath(const char *py_path_bundle)
+{
+ if(py_path_bundle==NULL) {
+ /* Common enough to have bundled *nix python but complain on OSX/Win */
+#if defined(__APPLE__) || defined(_WIN32)
+ fprintf(stderr, "Warning! bundled python not found and is expected on this platform. (if you built with CMake: 'install' target may have not been built)\n");
+#endif
+ return;
+ }
+ /* set the environment path */
+ printf("found bundled python: %s\n", py_path_bundle);
+
+#ifdef __APPLE__
+ /* OSX allow file/directory names to contain : character (represented as / in the Finder)
+ but current Python lib (release 3.1.1) doesn't handle these correctly */
+ if(strchr(py_path_bundle, ':'))
+ printf("Warning : Blender application is located in a path containing : or / chars\
+ \nThis may make python import function fail\n");
+#endif
+
+#ifdef _WIN32
+ /* cmake/MSVC debug build crashes without this, why only
+ in this case is unknown.. */
+ {
+ BLI_setenv("PYTHONPATH", py_path_bundle);
+ }
+#endif
+
+ {
+ static wchar_t py_path_bundle_wchar[1024];
+
+ /* cant use this, on linux gives bug: #23018, TODO: try LANG="en_US.UTF-8" /usr/bin/blender, suggested 22008 */
+ /* mbstowcs(py_path_bundle_wchar, py_path_bundle, FILE_MAXDIR); */
+
+ utf8towchar(py_path_bundle_wchar, py_path_bundle);
+
+ Py_SetPythonHome(py_path_bundle_wchar);
+ // printf("found python (wchar_t) '%ls'\n", py_path_bundle_wchar);
+ }
+}
+
/* Would be nice if python had this built in */
void PyC_RunQuicky(const char *filepath, int n, ...)
{
diff --git a/source/blender/python/generic/py_capi_utils.h b/source/blender/python/generic/py_capi_utils.h
index 0b821759bec..1730ad71721 100644
--- a/source/blender/python/generic/py_capi_utils.h
+++ b/source/blender/python/generic/py_capi_utils.h
@@ -48,4 +48,6 @@ void PyC_RunQuicky(const char *filepath, int n, ...);
void PyC_MainModule_Backup(PyObject **main_mod);
void PyC_MainModule_Restore(PyObject *main_mod);
+void PyC_SetHomePath(const char *py_path_bundle);
+
#endif // PY_CAPI_UTILS_H
diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c
index 555b42eb6fb..0afbe9a7003 100644
--- a/source/blender/python/intern/bpy_interface.c
+++ b/source/blender/python/intern/bpy_interface.c
@@ -164,52 +164,6 @@ void BPY_modules_update(bContext *C)
bpy_context_module->ptr.data= (void *)C;
}
-/* must be called before Py_Initialize */
-#ifndef WITH_PYTHON_MODULE
-static void bpy_python_start_path(void)
-{
- char *py_path_bundle= BLI_get_folder(BLENDER_PYTHON, NULL);
-
- if(py_path_bundle==NULL) {
- /* Common enough to have bundled *nix python but complain on OSX/Win */
-#if defined(__APPLE__) || defined(_WIN32)
- fprintf(stderr, "Warning! bundled python not found and is expected on this platform. (if you built with CMake: 'install' target may have not been built)\n");
-#endif
- return;
- }
- /* set the environment path */
- printf("found bundled python: %s\n", py_path_bundle);
-
-#ifdef __APPLE__
- /* OSX allow file/directory names to contain : character (represented as / in the Finder)
- but current Python lib (release 3.1.1) doesn't handle these correctly */
- if(strchr(py_path_bundle, ':'))
- printf("Warning : Blender application is located in a path containing : or / chars\
- \nThis may make python import function fail\n");
-#endif
-
-#ifdef _WIN32
- /* cmake/MSVC debug build crashes without this, why only
- in this case is unknown.. */
- {
- BLI_setenv("PYTHONPATH", py_path_bundle);
- }
-#endif
-
- {
- static wchar_t py_path_bundle_wchar[FILE_MAX];
-
- /* cant use this, on linux gives bug: #23018, TODO: try LANG="en_US.UTF-8" /usr/bin/blender, suggested 22008 */
- /* mbstowcs(py_path_bundle_wchar, py_path_bundle, FILE_MAXDIR); */
-
- utf8towchar(py_path_bundle_wchar, py_path_bundle);
-
- Py_SetPythonHome(py_path_bundle_wchar);
- // printf("found python (wchar_t) '%ls'\n", py_path_bundle_wchar);
- }
-}
-#endif
-
void BPY_context_set(bContext *C)
{
BPy_SetContext(C);
@@ -242,7 +196,8 @@ void BPY_python_start(int argc, const char **argv)
/* must run before python initializes */
PyImport_ExtendInittab(bpy_internal_modules);
- bpy_python_start_path(); /* allow to use our own included python */
+ /* allow to use our own included python */
+ PyC_SetHomePath(BLI_get_folder(BLENDER_PYTHON, NULL));
/* Python 3.2 now looks for '2.57/python/include/python3.2d/pyconfig.h' to parse
* from the 'sysconfig' module which is used by 'site', so for now disable site.
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
index ba698d79fdd..a3738995db3 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
@@ -1758,6 +1758,7 @@ static struct _inittab bge_internal_modules[]= {
/**
* Python is not initialised.
+ * see bpy_interface.c's BPY_python_start() which shares the same functionality in blender.
*/
PyObject* initGamePlayerPythonScripting(const STR_String& progname, TPythonSecurityLevel level, Main *maggie, int argc, char** argv)
{
@@ -1779,6 +1780,9 @@ PyObject* initGamePlayerPythonScripting(const STR_String& progname, TPythonSecur
/* must run before python initializes */
PyImport_ExtendInittab(bge_internal_modules);
+ /* find local python installation */
+ PyC_SetHomePath(BLI_get_folder(BLENDER_PYTHON, NULL));
+
Py_Initialize();
if(argv && first_time) { /* browser plugins dont currently set this */