2008-10-08 4 views
4

При использовании py2exe для распространения приложений Python с помощью wxPython некоторые DLL-файлы MSVC обычно необходимы для работы .exe на недавно установленных компьютерах. В частности, двумя наиболее распространенными DLL являются msvcp71.dll и msvcr71.dllpy2exe, включая DLL-файлы MSVC в .exe

Первый может быть включен в .exe, используя this tip. Тем не менее, последний просто помещается в директорию dist py2exe, а не в исполняемый файл, даже если я специально прошу включить его.

Любая идея, как заставить py2exe включать как внутри .exe?

ответ

7

Неужели это не запустит? Вы хотите, чтобы msvcr71.dll в том же каталоге, что и exe, чтобы загрузчик библиотеки смог найти и связать его с картой памяти приложения.

Это необходимо для базовой работы, поэтому вы не можете просто позволить py2exe распаковать его вместе с остальными библиотеками DLL.

+4

Я думаю, вы не понимаете, как работают DLL и py2exe. py2exe связывает библиотеки DLL с исполняемым файлом, а затем извлекает и загружает их во время выполнения перед запуском части Python. Чтобы выполнить извлечение, msvcr71.dll необходимо уже присутствовать. – 2008-10-08 07:22:42

+1

Вы хотите сказать, что файл .exe, созданный py2exe, нуждается в msvcr71.dll для извлечения и загрузки DLL из себя? – 2008-10-08 11:08:59

1

py2exe не может этого сделать. Вы можете обернуть py2exe (есть an example on the wiki, показывающий, как это сделать с NSIS); вы могли бы создать свою собственную оболочку, если использование NSIS или InnoSetup не было вариантом.

В качестве альтернативы, если вы уверены, что у ваших пользователей будет установлена ​​совместимая копия msvcr71.dll (пользователи IIRC Vista или XP SP2), вы можете уйти, не включая ее. Более полезно, возможно, если вы используете Python 2.3 (или старше), то ссылки Python против msvcr.dll, а не msvcr71.dll, и любой пользователь Windows будет установлен таким образом, поэтому вы можете просто не беспокоиться об этом.

1

Да, py2exe может это сделать. View this link. И если вы используете python2.7, замените «msvcr71» на «msvcp90».