Cannot use Winpdb (or PyDev) to trace embedded Python script in MSVC++ application - ImportError: No module named _socket

Chris8Boyd at gmail.com Chris8Boyd at gmail.com
Fri Jun 6 14:29:35 EDT 2008


On Jun 6, 11:25 am, Chris8B... at gmail.com wrote:
> On Jun 6, 1:13 am, Nir <nir1... at gmail.com> 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, Chris8B... at gmail.com 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 "<string>", line 1, in <module>
>   File "C:\Python25\Lib\cgi.py", line 40, in <module>
>     import urllib
>   File "c:\Python25\lib\urllib.py", line 26, in <module>
>     import socket
>   File "c:\Python25\lib\socket.py", line 45, in <module>
>     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



More information about the Python-list mailing list