Comment puis-je importer des modules dans boost::python python intégré code?

J'utilise boost::python pour intégrer du code python dans une application. J'ai été en mesure d'obtenir des instructions d'impression ou d'autres expressions à évaluer correctement, mais lorsque j'essaie d'importer des modules, il n'est pas de l'importation et de l'application est sortie. Outre le globals() appel de fonction dans le code intégré donne une erreur d'exécution.

#include <boost/python.hpp>

using namespace boost;
using namespace boost::python;
using namespace boost::python::api;

int main(void) {
    Py_Initialize();
    object main_module = import("__main__");
    object main_namespace = main_module.attr("__dict__");
    main_namespace["urllib2"] = import("urllib2");

    object ignored = exec(
            "print 'time'\n", main_namespace);
}

Ici, j'ai essayé de l'importer urllib2 à l'aide de la poussée de la fonction d'importation, cette compile et s'exécute correctement, mais avec les éléments suivants instruction exec, il donne une erreur.

    object ignored = exec(
            "print urllib2\n"
            "print 'time'\n", main_namespace);

Ou quand j'enlève la poussée de la fonction d'importation et de faire de l'importation de l'intérieur le code embarqué aussi, il donne une erreur. J'ai essayé en utilisant un essai: à l'exception de: bloc mais cela ne fonctionne pas non plus. Est-ce parce que le C++ application n'est pas en mesure de trouver l'emplacement de la urllib2 py module ou quelque chose? Est-il un moyen de définir le chemin d'accès du module avant d'essayer de l'importer?

Cela est construit uniquement à usage interne, de sorte que certains codage en dur des chemins d'accès est acceptable.

Edit: Plus d'infos:
C'est ce qui se passe. J'ai fait un try .. catch et a appelé le PyErr_Print() si jamais il y a une exception, et a obtenu ce que l'erreur tout le temps quand il y a un module importations ou même des appels de fonction. Message d'erreur:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: 'NoneType' object does not support item assignment

Quelqu'un peut penser à une raison quelconque?

OriginalL'auteur Sahas | 2009-06-02