встраивание ошибки python при инициализации

когда я запускаю код C для вызова функций python, возникает ошибка Py_Initialize(). Ошибка ImportError: нет модуля с именем site. Я пытался поставить Py_SetProgramName(argv[0]), но это не работает. Вызов cmd — это cInterfacePython Test.py, умноженный на 3 2 (exe — это cInterfacePython)


person PeterG    schedule 22.11.2011    source источник
comment
Похоже, ваша установка Python немного испорчена. Можете ли вы рассказать нам больше об этом?   -  person David Heffernan    schedule 23.11.2011
comment
я сам не устанавливал python на машину... так что я не знаю подробностей об этом...   -  person PeterG    schedule 23.11.2011
comment
@ user1023894: Я удалил свой пост, так как он не отвечает на ваш вопрос. Можете ли вы проверить, работает ли python.exe в той же среде, что и ваш собственный «cinterfacepython»?   -  person Macke    schedule 23.11.2011
comment
Если у вас нет доступа к этой машине, мы мало что можем сделать. Если Py_Initialize(), то я бы просто передал проблему тому, кто управляет машиной.   -  person David Heffernan    schedule 23.11.2011
comment
@Macke: я заставляю его работать, просто перемещая весь мой проект в каталог python.exe. Но знаете ли вы, как настроить переменные среды и пути, не перемещая весь проект? как в коде c?   -  person PeterG    schedule 23.11.2011
comment
@ user1023894: setenv ... см. мой обновленный ответ.   -  person Macke    schedule 24.11.2011


Ответы (2)


Мне пришлось немного повозиться с PATH env-var, а также с PYTHONPATH, чтобы при встраивании все работало лучше.

Py_SetProgramName не важен, это в основном для внутренней справки и т.д.

Итак, я предлагаю вам найти, где python установлен локально (это доступно в реестре на компьютерах с Windows), и использовать setenv, чтобы установить PATH и PYTHONPATH на что-то подходящее. Это будет каталог python.exe для PATH (как в вашем комментарии выше), а также установка PYTHONPATH в каталог с вашим собственным кодом python и связанными библиотеками, которые вы запускаете из встроенного exe.

Затем запустите Py_Initialize и посмотрите, все ли в порядке. Если вам нужно изменить PYTHONPATH после инициализации, измените sys.path с помощью PySys_SetPath().

person Macke    schedule 22.11.2011
comment
вы используете PySide? поэтому установка пути приложения к app_path установит путь среды к файлам python26? или команда PyRun_SimpleString импортирует правильные файлы? Но я падаю на Py_initialize.... - person PeterG; 23.11.2011
comment
Мне пришлось установить env-var PYTHONHOME (в расположение python.exe) вместо PYTHONPATH - person jakob.j; 05.12.2016

У меня была та же проблема (Windows, как с Visual Studio, так и с MinGW/g++), и я решил ее, добавив в PYTHONPATH путь к site.py. По какой-то причине запуск python.exe был возможен и без него, и sys.path действительно содержал этот путь (даже когда PYTHONPATH не содержал), и я мог «импортировать сайт», но Py_Initialize не мог делать то же самое, что python .exe сделал.

person Pascal Lamblin    schedule 16.01.2013