У меня есть модуль modA
, который содержит синтезированный подмодуль modB
(созданный с помощью PyModule_New
); импортирует модуль:синтезированный подмодуль: от импорта В (ok) против импорта A.B (ошибка)?
from modA import modB
это нормальноimport modA.modB
терпит неудачу.
Что мне не хватает?
modA.cpp (с использованием
boost::python
, но это было бы весьма вероятно, то же самое с чистым с-API питона):#include<boost/python.hpp> namespace py=boost::python; BOOST_PYTHON_MODULE(modA){ py::object modB=py::object(py::handle<>(PyModule_New("modB"))); modB.attr("__file__")="<synthetic>"; py::scope().attr("modB")=modB; };
компилировать с (г ++ вместо лязгом ++ работает так же)
clang++ -o modA.so modA.cpp -fPIC -shared -lboost_python `pkg-config python --cflags --libs`
test.py:
import sys sys.path.append('.') from modA import modB import modA.modB
python test.py
(обратите внимание, что первый импорт просто отлично, это второй один, который не может):Traceback (most recent call last): File "test.py", line 4, in <module> import modA.modB ImportError: No module named modB
Вы должны добавить свое решение в качестве ответа и принять его. –
Я просто сделал это, спасибо за предложение. Придется ждать 2 дня, чтобы принять его :-) – eudoxos