py2exe - как я могу уменьшить зависимости DLL? - PullRequest
4 голосов
/ 08 марта 2011

Моя программа зависит от USER32.dll, SHELL32.dll, ADVAPI32.dll, WS2_32.dll, GDI32.dll и KERNEL32.dll. Все они находятся в папке system32. Можно ли как-нибудь включить их в свою программу, чтобы она работала на всех компьютерах с Windows? Или это dll, которые уже можно найти во всех установках Windows?

Ответы [ 2 ]

3 голосов
/ 08 марта 2011

Когда py2exe встречает файл DLL, требуемый приложением, он решает, включать ли файл DLL в каталог распространения, используя различные критерии.Как правило, он не включает библиотеки DLL, если считает, что они принадлежат «системе», а не «приложению».

Вам необходимо переопределить критерии, в соответствии с которыми py2exe выбирает библиотеки DLL, которые он включает в полученный пакет.Ниже показано, как это сделать

# setup.py
from distutils.core import setup
import py2exe,sys,os

origIsSystemDLL = py2exe.build_exe.isSystemDLL
def isSystemDLL(pathname):
        if os.path.basename(pathname).lower() in ("msvcp71.dll", "dwmapi.dll"):
                return 0
        return origIsSystemDLL(pathname)
py2exe.build_exe.isSystemDLL = isSystemDLL

Этот код и приведенная выше цитата были взяты из страницы на сайте py2exe.Обязательно прочитайте эту страницу, включая заявления об отказе.

2 голосов
/ 08 марта 2011

Я не уверен насчет py2exe, но cx_Freeze - подобная утилита, которая активно обновляется.Возможно, вам придется использовать опцию bin-includes, чтобы вывести список ваших зависимостей, но по умолчанию он создает один файл .exe, который включает в себя зависимости.

...