Я развиваюсь в Windows, и я искал везде, не найдя никого, кто говорил об этом.
Я сделал приложение С++ на своем рабочем столе, в которое встроен Python 3.1 с помощью MSVC. Я связал python31.lib и включил python31.dll в папку запуска приложения вместе с исполняемым файлом. Он отлично работает. Мой код расширения и встраивания определенно работает, и сбоев нет.
Я отправил папку запуска моему другу, у которого нет Python, и приложение врезается для него во время этапа настройки сценариев.
Несколько часов назад я попробовал приложение на своем ноутбуке с установленным Python 2.6. У меня такое же поведение при столкновении, как и у моего друга, и через отладку выяснилось, что это был вызов Py_Initialize(), который терпит неудачу.
Я установил Python 3.1 на свой ноутбук без изменения кода приложения. Я побежал, и он работает отлично. Я удалил Python 3.1, и приложение снова сработало. Я добавил код в свое приложение, чтобы динамически связать его с локальной python31.dll, чтобы убедиться, что он его использует, но я все равно получаю сбой.
Я не знаю, требуется ли интерпретатору больше, чем DLL для запуска или что. Я не смог найти никаких ресурсов на этом. Документация на Python и другие руководства, похоже, никогда не рассматривают, как распространять ваши приложения на C/С++, которые используют вложение Python, не устанавливая локально локальный Python. Я знаю, что это больше проблема в Windows, чем в Unix, но я видел несколько приложений Windows C/С++, которые встраивают Python локально, и я не уверен, как они это делают.
Что еще мне нужно, кроме DLL? Почему это работает, когда я устанавливаю Python и перестаю работать, когда я его удалю? Похоже, это должно быть так тривиально; может быть, поэтому никто не говорит об этом. Тем не менее, я не могу объяснить, как справиться с этой проблемой.
Спасибо вам заблаговременно.