Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Python: Общие вопросы > Почему нельзя просто заменить DLL |
Автор: Karadul 27.2.2013, 14:38 |
Есть модуль pyopenssl, который представляет интерфейс к библиотекам OpenSSL, которые лежат в потрохах модуля, через .pyd файлы. Если заменить библиотеки OpenSSL новой версией, питон падает с сегфолтом во время работы программы. Как это обьяснить? |
Автор: похмелье 28.2.2013, 08:18 |
Karadul, возможно api библиотеки изменилось. Не очень понятно какие файлы есть, и какие были заменены. |
Автор: bilbobagginz 28.2.2013, 12:15 |
Karadul, не рекомендуется заменять бинарные библиотеки "под ногами" у питоновых модулей. иногда для обновления нужно обновить бинарные, а потом перекомпилить ту же версию питонового модуля (т.е. грубо говоря убрать *.pyc файлы) А иногда нужно обновлять и конфетку (бинарник библиотеки), и обертку (т.е. соотв. питонового модуля). |
Автор: похмелье 28.2.2013, 15:25 |
Karadul, в бинарниках версия 0.9.8, а на сайте уже 1.0.1. Возможно обратная совместимость отсутствует. Если иметь последнюю версию библиотеки на столько важно, то придётся искать отличия и править исходники pyOpenSSL. А вообще, "подсовывать" свежие dll — плохая идея, как уже было озвучено выше. |
Автор: Karadul 28.2.2013, 16:40 |
Так вот хочу увидеть обьяснение, почему это так, ведь подавляющее большинство программ прекрасно работает с новыми версиями библиотек, мирка прекрасно работает с разными версиями openssl. |
Автор: похмелье 28.2.2013, 18:06 |
Karadul, надо смотреть исходники обоих версий библиотек, выяснить при вызове какой функции происходит ошибка и т.д. Возможно, скомпилировать обе версии собственноручно и убедиться что ошибка имеет место быть. |
Автор: Karadul 28.2.2013, 18:36 |
А что лежит внутри pyd файлов? К чему они привязываются? |
Автор: похмелье 28.2.2013, 19:12 |
Karadul, pyd — это dll, имеющая специфические функции, которые "оформлены под питон" в виде модуля (есть __init__, функции принимают объекты питона, возвращают объекты питона…). Если интересно, то http://docs.python.org/3/c-api/index.html |
Автор: Karadul 28.2.2013, 20:55 |
В pyopenssl, как я понял, эти pyd и вызывают функции из дллок опенссл. Так вот вопрос, как они к ним привязываются? Может, там не имена указаны, а адреса функций или что-то такое? |
Автор: bilbobagginz 28.2.2013, 23:32 | ||
обычно != всегда |
Автор: Karadul 1.3.2013, 01:08 |
Обычно новые версии обратно совместимы со старыми, не думаю, что openssl - исключение. |
Автор: похмелье 1.3.2013, 10:00 |
Karadul, какой версией были заменены бинарники? Не просто же так http://www.openssl.org поддерживают две версии:![]() Также, если заглянуть в faq: How does the versioning scheme work? After the release of OpenSSL 1.0.0 the versioning scheme changed. Letter releases (e.g. 1.0.1a) can only contain bug and security fixes and no new features. Minor releases change the last number (e.g. 1.0.2) and can contain new features that retain binary compatibility. Changes to the middle number are considered major releases and neither source nor binary compatibility is guaranteed. Therefore the answer to the common question "when will feature X be backported to OpenSSL 1.0.0/0.9.8?" is "never" but it could appear in the next minor release. т.е. 1.0.х несовместима с 0.9.x added: Что гадать-то? Зайди на сайт, да посмотри. |
Автор: Karadul 1.3.2013, 11:59 |
Просто я до этого уже ставил модули от 2.6 на 2.7 или что-то вроде такого и оно точно так же падало, вот у меня и подозрения, что что-то к чему-то слишком сильно биндится. |
Автор: bilbobagginz 3.3.2013, 22:42 |
Karadul, существуют несовместимости 2.6 <-> 2.7, 2.5 <-> выше, и т.д. все надо проверять, писать совместимо, с "мягким" маршрутом миграции. Такова жизнь осторожного программиста. |
Автор: Karadul 4.3.2013, 04:03 | ||
Мы сейчас про бинарную несовместимость или про несовместимость исходников на питоне? |