[C++-sig] Boost.Python hello tutorial issue ?

Aurélien MAIGNAN amaignan at gmail.com
Fri May 30 16:08:34 CEST 2008


Hi
I have just started to see wrapping C++/Python and choose to use
boost.Python libs and further Py++ once mastered boost.Python.

So I read their tutorial introduction :
http://www.boost.org/doc/libs/1_35_0/libs/python/doc/tutorial/doc/html/index.html

Ok so i install Boost and choose Python lib at setup and msvc 8.0 as
compiler. (got 2005 express version).
Boost has been installed in this abs path : C:\Program
Files\boost\boost_1_35_0

Then i build the BJam tools usign the .bat isued with the Boost.Python
package.
I add the path in PATH Env Var.

Next and prior to use the bjam command in the tutorial directory (where
hello.cpp, hello.py and Jamroot files are)
i modified the user-config.jam file according to the tutorial :
This file is located in : C:\Program Files\boost\boost_1_35_0\tools\build\v2
here is  the modifications :

i added this :
#  Configure msvc (default version, searched in standard location
#  and PATH).
  using msvc : 8.0 ;

and this :
#  Python configuration
using python : 2.5 : C:/Python25 ;

the rest of the file hasn't change at all.

I doesn't touch the Jamroot file either

( **** note you can ignore the following it is another minor issue : ****

ok it is not totally right : i wish to change the default use-project rule
from :
use-project boost
  : ../../../.. ;   => default one
to
use-project boost
  : "$(BOOST_ROOT)  ;

where BOOST_ROOT is a user Env Var which store the path : C:\Program
Files\boost\boost_1_35_0

But that doesn't build using bjam command : the following error happend :
*** argument error
* rule use-project ( id : where )
* called with: ( boost :  )
* missing argument where

so finally i changed it to

use-project boost
  : "C:/Program Files/boost/boost_1_35_0" ;

but i would rather use the Env Var if possible

 **** end of the minor issue description **** )

so ok I launched bjam and after a while it finnished building the lib files,
and make me use the param *--preserve-test-targets* to bjam as indicated in
the tutorial for the 1.35 version.

 --> But the problem is that usign hello.py doesn't work due to the fact the
library weren't found by python.

Indeed the libs are generated in this paths :
C:\Program
Files\boost\boost_1_35_0\bin.v2\libs\python\build\msvc-8.0\debug\threading-multi\boost_python-vc80-mt-gd-1_35.dll
and :
C:\Program
Files\boost\boost_1_35_0\libs\python\example\tutorial\bin\msvc-8.0\debug\threading-multi\hello_ext.exp
C:\Program
Files\boost\boost_1_35_0\libs\python\example\tutorial\bin\msvc-8.0\debug\threading-multi\hello_ext.pyd
C:\Program
Files\boost\boost_1_35_0\libs\python\example\tutorial\bin\msvc-8.0\debug\threading-multi\hello_ext.lib

There is no way Python are aware of this new Libs !
Maybe i wrong but i though that bjam automated the creation of the library
for python and put the files where they need to be,
A clue of this is the fact that we needed to add :
#  Python configuration
using python : 2.5 : C:/Python25 ;
in the user-config.jam file, so i guessed that bjam would create
automatically the directory of the new module and put the libs there.

In order to make it work i had to copying the hello_ext.lib file to the
Python lib directory : C:\Python25\libs

and i had to create manually this directory :
C:\Python25\Lib\site-packages\hello_ext
In this directory I copied our libs files :
hello_ext.exp
hello_ext.pyd
boost_python-vc80-mt-gd-1_35.dll
And create also another file : __init__.py that contain the following :

import sys

sys.path.append('..\..')

# this brings in the DLL (pyd)
from hello_ext import *

And after this the new module was known from python and
hello.py work !
to sum up : does bjam automatically generate the module directory and plant
in the lib needed (and the __init__.py file) as I though it was
Or does i need to do this manually (and create another script/make like file
to automatize this) ?


Note 1 : this not my idea, in order to resolve my issue i found this on the
web wich is a similar case :
http://mail.python.org/pipermail/c++-sig/2007-November/013059.html
/Note 1


Note 2 : in this thread one advise to modified the Jamroot file and add this
:

# Declare a Python extension
python-extension _**name of ext goes here** # Declare a Python extension
  : **name of CPP with wrapper class(es) goes here**    # Source
  : <include>**your includes go here**
    <define>**your defines go here**
  : <library-path>**your lib path goes
here**<library-path>$(BOOST_ROOT)/stage/lib
  ;

so i putted this :

# Declare a Python extension
python-extension hello_ext # Declare a Python extension
  : hello.cpp    # Source
  #: <include>**your includes go here**
  #  <define>**your defines go here**
  #: <library-path>**your lib path goes here**
  <library-path>$(BOOST_ROOT)/stage/lib
  ;

But bjam doesn't work anymore (some error that imply some core .jam file
that is not from me) so I removed this and return to the the default vesion
:
# Declare the three extension modules.  You can specify multiple
# source files after the colon separated by spaces.
python-extension hello_ext : hello.cpp ;
/Note 2


THANKs for considering this post, a little long ^^ and excuse my english ;)

MAIGNAN Aurélien
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20080530/dcb9d8e7/attachment.htm>


More information about the Cplusplus-sig mailing list