Почему и как файл __init__.py
заставляет интерпретатор python искать подкатегории для модуля - и почему интерпретатор не соблюдает это соглашение при вызове из C++?__init__.py нисходит на грязь для python, но не из C++; вызывает ошибку «import matplotlib»
Вот что я знаю:
Использование Трассирования на моей программе, я могу видеть, что то же самое 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;
Когда сценарий питона вызывается из C++, поиск кажется, остановки, когда файл /opt/epd/lib/python2.5/site-packages/matplotlib
(или его вариант, matplotlib.so и т.д.) не найдены.
Обратите внимание, что я могу увеличить PYTHONPATH, чтобы указать точное местоположение matplotlib (и других необходимых пакетов), чтобы пройти дальше; однако, я не могу представить , чтобы указать путь для импорта matplotlib.cbook
.