Почему или как файл __init__.py
заставляет интерпретатор python искать
подкаталоги для модуля - и почему переводчик не соблюдает это
соглашение при вызове из C ++?
Вот что я знаю:
Используя strace в моей программе, я вижу, что то же самое
интерпретатор python2.5 выполняется как для интерактивного случая, так и для
C ++ вызов.
В обоих случаях PYTHONPATH направляет
поиск соответствующего импортируемого модуля (matplotlib). Это выглядит как
серия вызовов open (), начиная с текущего рабочего каталога и
простирающийся до PYTHONPATH (здесь /opt/epd/lib/python2.5/site-packages
), и
наконец, в подкаталоги, в рабочем случае.
Полное раскрытие заключается в том, что я использую дистрибутив "Enthought" и должен был
поместите файл __init__.py
в каталог site-packages
и поместите
site-packages
каталог в PYTHONPATH для создания рабочего кейса.
Код ниже. Кажется, что мне может понадобиться позвонить, чтобы настроить
интерпретатор Python для поиска __init__
и / или recurse, чтобы найти
запрошенные пакеты. ЕСЛИ ТАК, КАК ??
PyObject* main_module, * global_dict, * expression, *args, *spec;
Py_Initialize ();
char* script = "abc.py";
PySys_SetArgv(1, &script);
//Open the file containing the python modules we want to run
FILE* file_1 = fopen("abc.py", "r");
if (file_1 == 0) fprintf(stdout, "ERROR: File not opened");
//Loads the python file into the interpreter
PyRun_SimpleFile(file_1, "abc.py");
//Creates a python object that contains references to the functions and classes in abc.py
main_module = PyImport_AddModule("__main__");
global_dict = PyModule_GetDict(main_module);
expression = PyDict_GetItemString(global_dict, "view_gui");
spec = PyObject_CallObject(expression, NULL);
PyObject_CallMethod(spec, "shutdown", NULL);
Py_Finalize();
return NULL;
Когда скрипт на Python вызывается из C ++, поиск кажется
остановить, когда файл /opt/epd/lib/python2.5/site-packages/matplotlib
(или это
вариант, matplotlib.so и т. д.) не найдены.
Обратите внимание, что я могу увеличить PYTHONPATH, указав точное местоположение
Matplotlib (и другие необходимые пакеты), чтобы получить дальше; однако я не могу показаться
включить путь для импорта matplotlib.cbook
.