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

2008-06-05 Thread Chris8Boyd
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

2008-06-06 Thread Chris8Boyd
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

2008-06-06 Thread Chris8Boyd
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