Cannot use Winpdb (or PyDev) to trace embedded Python script in MSVC++ application - ImportError: No module named _socket
I am embedding Python in a MSVC++ (2005) application. The application creates some environment and then launches a Python script that will call some functions exported from the MSVC++ application. I want to be able to debug the Python script by using a debug server, like Winpdb (winpdb.org). I use ActivePython 2.5.2.2, Microsoft Visual Studio 2005, and Winpdb 1.3.8. When I launch a script like "e:>python test.py" everything is O'K and I can use Winpdb to trace/debug. When I run the same script from the MSVC++ application, there is always a complain "ImportError: No module named _socket". Here is the basic test script I use: >>> def Process( something ): print "\n\nStarted debugging\n=\n" #pydevd.settrace() import rpdb2; rpdb2.start_embedded_debugger("1") print "\n\nStopped debugging\n=\n" if __name__ == '__main__': Process( "test" ) <<< In the MSVC++ application I tried many approaches, as suggested by many people, and all of them work to launch the script, but none of them works with Winpdb (or PyDev for Eclipse - same problem). Just for completeness - here is one: >>> PyRun_SimpleString("import sys"); PyRun_SimpleString("import os"); PyRun_SimpleString( "fullpath = os.path.abspath(\"E:/Test.py\")" ); PyRun_SimpleString( "g = globals().copy()" ); PyRun_SimpleString( "g['__file__'] = fullpath"); PyRun_SimpleString( "execfile(fullpath, g) "); <<< If I use pdb (import pdb + pdb.runcall(something) ) everything works fine, but I need the performance and convinience of Winpdb. What am I doing wrong? Your help is highly appreciated! Best regards, Chris -- http://mail.python.org/mailman/listinfo/python-list
Re: Cannot use Winpdb (or PyDev) to trace embedded Python script in MSVC++ application - ImportError: No module named _socket
On Jun 6, 1:13 am, Nir <[EMAIL PROTECTED]> wrote: > You seem to be having a problem with the import path of the embedded > interpreter. I suppose the embedded interpreter includes some modules > in a particular folder and _socket is not one of them. For the sake of > debugging try adding the c:\python25\lib path to the sys.path variable > of the interpreter before attempting to import rpdb2. > > Does this work? > > Nir > > On Jun 5, 2:52 pm, [EMAIL PROTECTED] wrote: > > > I am embedding Python in a MSVC++ (2005) application. The application > > creates some environment and then launches a Python script that will > > call some functions exported from the MSVC++ application. > > > I want to be able to debug the Python script by using a debug server, > > likeWinpdb(winpdb.org). > > > I use ActivePython 2.5.2.2, Microsoft Visual Studio 2005, andWinpdb > > 1.3.8. > > > When I launch a script like "e:>python test.py" everything is O'K and > > I can useWinpdbto trace/debug. > > > When I run the same script from the MSVC++ application, there is > > always a complain "ImportError: No module named _socket". > > > Here is the basic test script I use: > > > def Process( something ): > > print "\n\nStarted debugging\n=\n" > > #pydevd.settrace() > > import rpdb2; rpdb2.start_embedded_debugger("1") > > print "\n\nStopped debugging\n=\n" > > > if __name__ == '__main__': > > Process( "test" ) > > <<< > > > In the MSVC++ application I tried many approaches, as suggested by > > many people, and all of them work to launch the script, but none of > > them works withWinpdb(or PyDev for Eclipse - same problem). Just for > > completeness - here is one: > > > PyRun_SimpleString("import sys"); > > PyRun_SimpleString("import os"); > > PyRun_SimpleString( "fullpath = os.path.abspath(\"E:/Test.py\")" ); > > PyRun_SimpleString( "g = globals().copy()" ); > > PyRun_SimpleString( "g['__file__'] = fullpath"); > > PyRun_SimpleString( "execfile(fullpath, g) "); > > <<< > > > If I use pdb (import pdb + pdb.runcall(something) ) everything works > > fine, but I need the performance and convinience ofWinpdb. > > > What am I doing wrong? > > > Your help is highly appreciated! > > > Best regards, > > Chris Nir, > Does this work? Unfortunately, not. I did some experiments to check the sys.path hypothesis: - In my MSVC++ application I did PyRun_SimpleString("import cgi"); - it complained about missing _socket. - Did PyRun_SimpleString("print sys.path") to get the sys.path as seen from within the application environment (that does not find _socket) - Did the same in "test.py" and ran ...>Python test.py to get the sys.path for the environment that _does_ find _socket - Compared the two - the working environment had two more paths: C:\\WINDOWS\\system32\\python25.zip C:\\Python25\\lib\\plat-win - Added the missing path to the embedded environment: PyRun_SimpleString("import sys"); PyRun_SimpleString("import os"); PyRun_SimpleString("sys.path.append(\"C:\\WINDOWS\\system32\ \python25.zip\")"); PyRun_SimpleString("sys.path.append(\"C:\\Python25\\lib\\plat-win \")"); PyRun_SimpleString("print sys.path"); PyRun_SimpleString("import cgi"); Not all paths that are in the working environment are present in the embedded environment, but still there is a problem: Traceback (most recent call last): File "", line 1, in File "C:\Python25\Lib\cgi.py", line 40, in import urllib File "c:\Python25\lib\urllib.py", line 26, in import socket File "c:\Python25\lib\socket.py", line 45, in import _socket ImportError: No module named _socket Chris -- http://mail.python.org/mailman/listinfo/python-list
Re: Cannot use Winpdb (or PyDev) to trace embedded Python script in MSVC++ application - ImportError: No module named _socket
On Jun 6, 11:25 am, [EMAIL PROTECTED] wrote: > On Jun 6, 1:13 am, Nir <[EMAIL PROTECTED]> wrote: > > > > > You seem to be having a problem with the import path of the embedded > > interpreter. I suppose the embedded interpreter includes some modules > > in a particular folder and _socket is not one of them. For the sake of > > debugging try adding the c:\python25\lib path to the sys.path variable > > of the interpreter before attempting to import rpdb2. > > > Does this work? > > > Nir > > > On Jun 5, 2:52 pm, [EMAIL PROTECTED] wrote: > > > > I am embedding Python in a MSVC++ (2005) application. The application > > > creates some environment and then launches a Python script that will > > > call some functions exported from the MSVC++ application. > > > > I want to be able to debug the Python script by using a debug server, > > > likeWinpdb(winpdb.org). > > > > I use ActivePython 2.5.2.2, Microsoft Visual Studio 2005, andWinpdb > > > 1.3.8. > > > > When I launch a script like "e:>python test.py" everything is O'K and > > > I can useWinpdbto trace/debug. > > > > When I run the same script from the MSVC++ application, there is > > > always a complain "ImportError: No module named _socket". > > > > Here is the basic test script I use: > > > > def Process( something ): > > > print "\n\nStarted debugging\n=\n" > > > #pydevd.settrace() > > > import rpdb2; rpdb2.start_embedded_debugger("1") > > > print "\n\nStopped debugging\n=\n" > > > > if __name__ == '__main__': > > > Process( "test" ) > > > <<< > > > > In the MSVC++ application I tried many approaches, as suggested by > > > many people, and all of them work to launch the script, but none of > > > them works withWinpdb(or PyDev for Eclipse - same problem). Just for > > > completeness - here is one: > > > > PyRun_SimpleString("import sys"); > > > PyRun_SimpleString("import os"); > > > PyRun_SimpleString( "fullpath = os.path.abspath(\"E:/Test.py\")" ); > > > PyRun_SimpleString( "g = globals().copy()" ); > > > PyRun_SimpleString( "g['__file__'] = fullpath"); > > > PyRun_SimpleString( "execfile(fullpath, g) "); > > > <<< > > > > If I use pdb (import pdb + pdb.runcall(something) ) everything works > > > fine, but I need the performance and convinience ofWinpdb. > > > > What am I doing wrong? > > > > Your help is highly appreciated! > > > > Best regards, > > > Chris > > Nir, > > > Does this work? > > Unfortunately, not. > > I did some experiments to check the sys.path hypothesis: > > - In my MSVC++ application I did PyRun_SimpleString("import cgi"); - > it complained about missing _socket. > > - Did PyRun_SimpleString("print sys.path") to get the sys.path as seen > from within the application environment (that does not find _socket) > > - Did the same in "test.py" and ran ...>Python test.py to get the > sys.path for the environment that _does_ find _socket > > - Compared the two - the working environment had two more paths: > > C:\\WINDOWS\\system32\\python25.zip > C:\\Python25\\lib\\plat-win > > - Added the missing path to the embedded environment: > > PyRun_SimpleString("import sys"); > PyRun_SimpleString("import os"); > > PyRun_SimpleString("sys.path.append(\"C:\\WINDOWS\\system32\ > \python25.zip\")"); > PyRun_SimpleString("sys.path.append(\"C:\\Python25\\lib\\plat-win > \")"); > > PyRun_SimpleString("print sys.path"); > > PyRun_SimpleString("import cgi"); > > Not all paths that are in the working environment are present in the > embedded environment, but still there is a problem: > > Traceback (most recent call last): > File "", line 1, in > File "C:\Python25\Lib\cgi.py", line 40, in > import urllib > File "c:\Python25\lib\urllib.py", line 26, in > import socket > File "c:\Python25\lib\socket.py", line 45, in > import _socket > ImportError: No module named _socket > > Chris There is a typo: "Not all paths that are in the working environment are present in the embedded environment, but still there is a problem:" should read "Now all paths" Sorry! Chirs -- http://mail.python.org/mailman/listinfo/python-list