Strange crash while running a script with a embedded python interpreter

Rickard Englund gefle.rickard at gmail.com
Fri Jan 8 11:18:38 EST 2016


First, some system info
* Windows 7 (also tested on 8 and 10) 
* Python 3.5.1 64bit (previously also tested using several 3.x versions)  (also tested with 32 bit, but with 3.4.2) 
* Microsoft Visual Studio 2015 (earlier version of python also tested with Visual Studio 2013)  

We have tested with both the debug and release libs for 3.5 and 3.5.1 (those available from python installer) with the same problem. 

The following problem has also been tested on Unix and on MacOS where it works as expected, the problem is only in Windows. 


Problem description:
We have an application for scientific visualization in which we have enabled scripting using embedded python. We have exposed quite some features of our application to python using modules, this works perfectly fine. 
The problem we have is that the application crashes as soon as a script is trying to import some of python's default libraries, such as os or random. For example, running the single line code "import os" produces a crash with the following stacktrace:
http://pastebin.com/QpfGrMY0

We initialize the python interpreter using the following: 
http://pastebin.com/uyx6gdMb 

We have tried with and without the Py_NoSiteFlag = 1. When removing that flag it works for some modules, for example "import os" works, but other modules, for example "import random" crashes. 


In the pastebin link above for the python initialization there are three lines commented out, "importModule("os")","importModule("glog")" and "importModule("random")", if I uncomment those lines the application will not crash when importing those modules. But that is not a viable solution, we can't import all possible modules that way. 

The following piece of code is how we execute python code: 
http://pastebin.com/HDUR2LKT


It only crashes for modules that exists , if I try to import a module that does not at all exist (eg import unexisting_module) , it fails as expected with a nice error message saying it does not exist. 


I don't know if we are doing anything wrong in the initialization of the interpreter or when running the script. We can run scripts that are not using any modules or are only using the python modules we create in c++ to expose functionality of our application.
Everything is working fine on MacOSX and Linux (tested with Ubuntu) which are the platforms we support. We had a similar setup before using python 2.x instead of 3.x which also worked without any problems. 


The software i am talking about is using QT for gui and and OpenGL for hardware accelerated graphics. But I have tested it in a minimal application where all QT stuff were omitted and the same issue is still there. 

The software is open source and can be downloaded/clones from github.com/inviwo/inviwo. 

The python initialization is done in 
https://github.com/inviwo/inviwo-dev/blob/master/modules/python3/pyinviwo.cpp 
and the script compiling and running is handled in 
https://github.com/inviwo/inviwo-dev/blob/master/modules/python3/pythonscript.cpp


I have searched a lot on google and in the issue tracker for python but found nothing that can answer my questions. So I hope that someone here can us solve this. 




More information about the Python-list mailing list