Встроенный Python загружает модуль, но не загружает внутренние операторы импорта этого модуля - PullRequest
0 голосов
/ 04 апреля 2011

Наконец-то (!) Я скомпилировал Boost :: Python и получил свой проект XCode для импорта локального модуля. Этот модуль начинается со строки from xml.dom import minidom, но когда он выполняется, мне выдается эта ошибка:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "FeedStore.py", line 1, in <module>
    from xml.dom import minidom
ImportError: No module named xml.dom

Однако я знаю, что установил модуль xml Python - когда я открываю Python из командной строки и набираю from xml.dom import minidom, все идет гладко. Более того, когда я импортирую модуль, он ведет себя так, как я ожидал.

Я подозревал, что с sys.path что-то не так, поэтому я сравнил тот, который я получаю из приглашения, с тем, который используется во встроенном модуле. Единственное отличие состоит в том, что встроенный sys.path не содержит ''. Я пытался добавить его, но это не изменило его поведение.

Я также подозревал, что встроенная версия обращалась к другой версии Python, отличной от той, которую я использовал в приглашении, но sys.prefix совпал с обоими выполнениями.

Вот код, который импортирует мой модуль и запускает его. На данный момент это довольно скромно (даже не подсчет ссылок), потому что на данный момент я просто хотел бы убедиться, что смогу встроить свой модуль (я - абсолютный новичок на C ++ программист).

    Py_Initialize();

    //PyRun_SimpleString("import sys");
    //PyRun_SimpleString("sys.path.append('')"); //tried this to no avail!

    PySys_SetPath("/Users/timoooo/Documents/Code/TestEmbed/"); //this allows me to import my local module


    PyRun_SimpleString("import FeedStore as fs"); //here's where it whines about the lack of xml.dom
    PyRun_SimpleString("store = fs.feedStore()");
    PyRun_SimpleString("print store.next()");

    Py_Finalize();

Я, вероятно, неправильно понимаю что-то важное в boost :: python. Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 07 апреля 2011

Несмотря на одинаковые значения sys.path, вызов PyRun_SimpleString("sys.path.append(\"<<path>>\")"); с нужными мне местами исправил проблему.

...