Как мне собрать zlib.pyd?

У меня есть программа, созданная py2exe, которая не работает, потому что ей нужна копия zlib.pyd. Как мне это построить? Я могу создать zlib.dll (или .lib) из исходного кода, я могу скомпилировать Python из исходного кода, я довольно неплохо работал с distutils, py2exe и pyinstaller, так что я хорошо чувствую "ландшафт", но Я не уверен, как напрямую создать такой .pyd.

Обновлять:

Я нашел это:

сборка Python из исходного кода с поддержкой zlib

Кажется, это ответ для Linux, но это не совсем применимо в Windows с использованием nmake ...

Вы запускаете py2exe со стандартной установкой Python? Если это так, вы почти наверняка захотите, чтобы py2exe скопировал существующий zlib.pyd из stdlib, а не создавал его новую копию.

abarnert 07.08.2018 03:11

если вам действительно делать нужно создать его копию, предполагая, что вы хотите создать копию из дерева исходных текстов CPython, IIRC, это вопрос редактирования Modules/Setup.local, копирования раздела zlib из Modules/Setup, раскомментирования, а затем вы можете ... Я не знаю последний шаг в Windows (в * nix это команда make…).

abarnert 07.08.2018 03:13

Спасибо @abarnert. Я проверю это. Кстати, zlib.pyd не входит в комплект стандартной установки Python. Естественно, что CPython его не создает. Отсюда вопрос! Я нашел старую случайную копию, плавающую в Интернете, но когда я попытался это сделать, это не удалось, потому что она хотела использовать старую версию базового python.dll. Итак, вы правы, что должно быть соответствие версий.

BuvinJ 07.08.2018 14:21

В Windows кажется, что это файл Setup.dist. В противном случае это несоответствие версии Python. Работаю с v.2.7. В комментарии уже есть строка zlibmodule. Я раскомментировал его, запустил сборку, все прошло успешно, но не удалось найти .pyd! Сейчас я пытаюсь использовать distutil, чтобы напрямую создать расширение из файла zlibmodule.c. У меня это почти работает, но я сталкиваюсь с ошибками компоновщика ...

BuvinJ 07.08.2018 15:56
zlib был частью библиотеки Python stdlib примерно с 1.5. Если zlib.pyd нет, он должен быть связан с интерпретатором (в python27.dll), и в этом случае он вам не понадобится в вашем приложении py2exe. Можете ли вы import zlib из Python? Если так, я думаю, вы пытаетесь решить не ту проблему.
abarnert 07.08.2018 17:44

Я пришел к выводу, что вы правы, что zlib просто встроен в интерпретатор. Тем не менее, когда я упаковываю эту dll, над которой я работаю, она терпит неудачу, и использование Dependency Walker показывает, что причиной является сбой LoadLibraryA с zlib.pyd. Без этого файла он утверждает, что зависимость отсутствует. Мне удалось построить его сейчас, причем довольно уродливо, но он все еще не работает, несмотря на то, что был найден ...

BuvinJ 07.08.2018 21:03

В качестве теста я просто создал крошечный exe (а не dll) с использованием py2exe, который просто запускает тест zlib. Этот exe работает, и zlib.pyd не требуется. Я сейчас попробую нечто подобное с dll. К сожалению, в моем фактическом случае использования у меня импортируется значительная библиотека, которая поступает из Google. Понятия не имею, где и как они используют zlib.

BuvinJ 07.08.2018 21:20

Ух ... Да, у меня есть пример dll (com server), который теперь напрямую использует zlib, и он работает без каких-либо проблем. Мне определенно кажется, что Dependency Walker бросил мне отвлекающий маневр!

BuvinJ 07.08.2018 21:29
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
8
101
0

Другие вопросы по теме