Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 15, 2010 21:48:19

jkacs
От:
Зарегистрирован: 2010-02-15
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему встроенный Python не работает с PYD?

При встраивании Python в приложение столкнулся с проблемой.
Элементарный скрипт, который выполняется без проблем:

import ctypes
print ctypes.__dict__

при таком встраивании в Win приложение:

Py_Initialize();

//PyRun_SimpleString(“import os; print os.__dict__\n”);
PyRun_SimpleString(“import ctypes; print ctypes.__dict__\n”);

Py_Finalize();

дает ошибку

Traceback (most recent call last):
File “<string>”, line 1, in <module>
File “C:\Python25\Lib\ctypes\__init__.py”, line 10, in <module>
from _ctypes import Union, Structure, Array
ImportError: No module named _ctypes


аналогичная строка для модуля os выполняется без проблем.

Такое впечатление, что встроенный Python по разному относится к модулям в py/pyc формате (os) и dll модулям pyd (ctypes)
Сталкивался ли кто-нибудь с такой проблемой?



Офлайн

#2 Фев. 16, 2010 18:40:55

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Почему встроенный Python не работает с PYD?

_ctypes.pyd не находится в ваших sys.path. Встраиваемый Питон делает то же самое, что и стандартный. Только эти пути может чуть иначе настроить



Офлайн

#3 Фев. 18, 2010 21:33:37

jkacs
От:
Зарегистрирован: 2010-02-15
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему встроенный Python не работает с PYD?

_ctypes.pyd находится в C:\Python25\DLL, есть в sys.path и в станлартном и во встраиваемом.

Проблема оказалась в том что еmbedded оказался чувствителен к версии С компилятора!
После перекомпиляции Питона и _ctype ошибка исчезла



Офлайн

#4 Фев. 19, 2010 06:18:55

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Почему встроенный Python не работает с PYD?

А можете подробнее о версии компилятора? Для меня ваше объяснение звучит загадочно.



Офлайн

#5 Фев. 19, 2010 21:03:17

jkacs
От:
Зарегистрирован: 2010-02-15
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему встроенный Python не работает с PYD?

Я вначале использовал оригинальные версии библиотек python25.dll u _ctypes.pyd из инсталлятора pywin32.
Приложение со встроеным Питоном компилировалось в VS2003.
После перекомпиляиции исходников Питона и _ctype также в VS2003 встроенное приложение стало работать с новым _ctypes.pyd.



Офлайн

#6 Фев. 20, 2010 05:18:31

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Почему встроенный Python не работает с PYD?

Чудеса. Python 2.5 и так поставляется собранный VC 7.1 (он же VS 2003).



Офлайн

#7 Июнь 25, 2012 10:25:08

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему встроенный Python не работает с PYD?

у меня проблема что импорт модулей где задействованы .pyd файлы работает только в release версии(vs2008) python2.7 сборка стандартная скаченная с сайта, причем python27_d.dll я собирал сам из исходников, но весь питон не понял как собрать, т.е. например откуда должны взяться .pyd файлы для дебаг версии и может буть что то еще отличающееся от простой поставки?



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Офлайн

#8 Июнь 26, 2012 22:16:45

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Почему встроенный Python не работает с PYD?

Вы чем пользуетесь? boost применяет трюк с #define/#undef для включения недебажной версии по умолчанию. Смотрите http://svn.boost.org/svn/boost/trunk/boost/python/detail/wrap_python.hpp



Офлайн

#9 Июнь 27, 2012 12:27:25

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему встроенный Python не работает с PYD?

я так понимаю моя проблема может быть еще и в том, что .lib файл я использовал от стандартной поставки(release), а не от скомпилированной собственноручно debug версии(.dll подключал python27_d.dll)
так всё таки для debug/release нужно изменять только .lib и .dll или же еще и .pyd файлы? и еще может быть что то в окружении питона?

питон можно собрать статически?

boost.python не пользовался, показалось сложным и я так и не понял он в две стороны работает? т.е. можно и с++ из питона и питон из с++?
ошибки с .pyd файлами воспроизводились даже на PyRun_SimpleString(“import some_module”)
т.е. если some_module в своих импортах не содержит импорт .pyd файлов, то всё норм, если же содержит, то пишет что не может найти какие либо модули(вроде ошибка была с import _socket).



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Отредактировано mrgloom (Июнь 27, 2012 12:27:41)

Офлайн

#10 Июнь 27, 2012 20:16:28

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Почему встроенный Python не работает с PYD?

Да, нужно чтобы .lib, .dll и .pyd все вместе использовали или релизную или дебажную сборку. Смешать — не выйдет.

Я когда-то собирал статический питон. Не слишком сложно, но довольно неудобно. DLL удобней. К тому же если у вас питон статический дебажный — то и всё остальное тоже должно быть таким. Как трюк можно использовать релизную сборку с выключенной оптимизацией и сгенерированной отладочной информацией — но это тоже не вполне удобно.

Py_SetProgramName и Py_SetPythonHome вызывали перед Py_Initialize?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version