Hi David, I'm just reviewing Boost.Python PRs, and looking at https://github.com/boostorg/python/pull/55 I was reminded of this little exchange. Sorry for having dropped the ball here...
On 01.02.2016 17:36, David Sankel wrote: > On Sat, Jan 30, 2016 at 7:30 AM, Stefan Seefeld <ste...@seefeld.name > <mailto:ste...@seefeld.name>> wrote: > > > Yes. Can you describe your use-case ? And what do you mean exactly by > "semantically different" ? :-) > > > In one '.cpp' file I have something like: > > > void addFooAssets() > { > boost::python::class_< Foo > ( /* etc. */ ) > .def( /* etc */ ); > } > > // testing code follows. > > BOOST_PYTHON_MODULE( fooTest ) > { > addFooAssets(); > } > > BOOST_AUTO_TEST_CASE( fooAssets ) { > // import 'fooTest' and check that all is good. > } > > In another '.cpp' file, I have something like: > > void initBarPackage() > { > boost::python::object barPackage = boost::python::scope(); > barPackage.attr( "__path__" ) = "bar"; > > boost::python::object barFooPackage( > boost::python::handle<>( > boost::python::borrowed(::PyImport_AddModule( "bar.foo" ) ) ) ); > barPackage.attr( "foo" ) = barFooPackage; > > { > const boost::python::scope fooScope( barFooPackage ); > addFooAssets(); > } > } > > // testing code follows > What do you attempt to do in the above ? Why not simply create "bar" via BOOST_PYTHON_MODULE(bar) ? For example: BOOST_PYTHON_MODULE(bar) { object barPackage = scope(); object barFooPackage = import("foo"); barPackage.attr( "foo" ) = barFooPackage; } should have the effect you are seeking, if I understand correctly. There is no need to invoke "addFooAssets()" twice. Stefan -- ...ich hab' noch einen Koffer in Berlin... _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org https://mail.python.org/mailman/listinfo/cplusplus-sig