У меня есть программа, созданная py2exe, которая не работает, потому что ей нужна копия zlib.pyd. Как мне это построить? Я могу создать zlib.dll (или .lib) из исходного кода, я могу скомпилировать Python из исходного кода, я довольно неплохо работал с distutils, py2exe и pyinstaller, так что я хорошо чувствую "ландшафт", но Я не уверен, как напрямую создать такой .pyd.
Обновлять:
Я нашел это:
сборка Python из исходного кода с поддержкой zlib
Кажется, это ответ для Linux, но это не совсем применимо в Windows с использованием nmake
...
если вам действительно делать нужно создать его копию, предполагая, что вы хотите создать копию из дерева исходных текстов CPython, IIRC, это вопрос редактирования Modules/Setup.local
, копирования раздела zlib
из Modules/Setup
, раскомментирования, а затем вы можете ... Я не знаю последний шаг в Windows (в * nix это команда make
…).
Спасибо @abarnert. Я проверю это. Кстати, zlib.pyd не входит в комплект стандартной установки Python. Естественно, что CPython его не создает. Отсюда вопрос! Я нашел старую случайную копию, плавающую в Интернете, но когда я попытался это сделать, это не удалось, потому что она хотела использовать старую версию базового python.dll. Итак, вы правы, что должно быть соответствие версий.
В Windows кажется, что это файл Setup.dist. В противном случае это несоответствие версии Python. Работаю с v.2.7. В комментарии уже есть строка zlibmodule. Я раскомментировал его, запустил сборку, все прошло успешно, но не удалось найти .pyd! Сейчас я пытаюсь использовать distutil, чтобы напрямую создать расширение из файла zlibmodule.c. У меня это почти работает, но я сталкиваюсь с ошибками компоновщика ...
zlib
был частью библиотеки Python stdlib примерно с 1.5. Если zlib.pyd
нет, он должен быть связан с интерпретатором (в python27.dll
), и в этом случае он вам не понадобится в вашем приложении py2exe. Можете ли вы import zlib
из Python? Если так, я думаю, вы пытаетесь решить не ту проблему.
Я пришел к выводу, что вы правы, что zlib просто встроен в интерпретатор. Тем не менее, когда я упаковываю эту dll, над которой я работаю, она терпит неудачу, и использование Dependency Walker показывает, что причиной является сбой LoadLibraryA с zlib.pyd. Без этого файла он утверждает, что зависимость отсутствует. Мне удалось построить его сейчас, причем довольно уродливо, но он все еще не работает, несмотря на то, что был найден ...
В качестве теста я просто создал крошечный exe (а не dll) с использованием py2exe, который просто запускает тест zlib. Этот exe работает, и zlib.pyd не требуется. Я сейчас попробую нечто подобное с dll. К сожалению, в моем фактическом случае использования у меня импортируется значительная библиотека, которая поступает из Google. Понятия не имею, где и как они используют zlib.
Ух ... Да, у меня есть пример dll (com server), который теперь напрямую использует zlib, и он работает без каких-либо проблем. Мне определенно кажется, что Dependency Walker бросил мне отвлекающий маневр!
Вы запускаете py2exe со стандартной установкой Python? Если это так, вы почти наверняка захотите, чтобы py2exe скопировал существующий
zlib.pyd
из stdlib, а не создавал его новую копию.