Russian Qt Forum

Программирование => Python => Тема начата: sergek от Апрель 20, 2011, 20:36



Название: [Решено] Сборка PythonQt под Windows
Отправлено: sergek от Апрель 20, 2011, 20:36
Коллеги, пытаюсь собрать PythonQt с иcпользованием Qt SDK для Windows. На этапе сборки - ошибки:
Код:
cd src\ && C:/Qt/2010.05/mingw/bin/mingw32-make -f Makefile 

mingw32-make[1]: Entering directory `C:/PythonQt-build-desktop/src'

C:/Qt/2010.05/mingw/bin/mingw32-make -f Makefile.Release

mingw32-make[2]: Entering directory `C:/PythonQt-build-desktop/src'

g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -shared -mthreads -Wl -Wl,--out-implib,..\lib\libPythonQt.a -o ..\lib\PythonQt.dll object_script.PythonQt.Release  -L"c:\Qt\2010.05\qt\lib" c:\Python26\libs\python26.lib -lQtGui4 -lQtCore4

Creating library file: ..\lib\libPythonQt.a

mingw32-make[2]: Leaving directory `C:/PythonQt-build-desktop/src'

mingw32-make[1]: Leaving directory `C:/PythonQt-build-desktop/src'

mingw32-make: Leaving directory `C:/PythonQt-build-desktop'

./release\PythonQt.o:PythonQt.cpp:(.text+0x2e8): undefined reference to `_imp__PyModule_Type'

./release\PythonQt.o:PythonQt.cpp:(.text+0x427): undefined reference to `_imp__PyInt_Type'

./release\PythonQt.o:PythonQt.cpp:(.text+0x48d): undefined reference to `_imp__PyType_Type'

./release\PythonQt.o:PythonQt.cpp:(.text+0x26ed): undefined reference to `_imp__PyExc_AttributeError'

./release\PythonQt.o:PythonQt.cpp:(.text+0x4d54): undefined reference to `_imp__PyModule_Type'

./release\PythonQt.o:PythonQt.cpp:(.text+0x51bf): undefined reference to `_imp__PyModule_Type'

./release\PythonQt.o:PythonQt.cpp:(.text+0x663d): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQt.o:PythonQt.cpp:(.text+0x6999): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQt.o:PythonQt.cpp:(.text+0x6aab): undefined reference to `_imp__PyModule_Type'

./release\PythonQt.o:PythonQt.cpp:(.text+0x6d79): undefined reference to `_imp__PyType_Type'

./release\PythonQt.o:PythonQt.cpp:(.text+0x6df1): undefined reference to `_imp__Py_NoSiteFlag'

./release\PythonQt.o:PythonQt.cpp:(.text+0x71a5): undefined reference to `_imp__PyType_Type'

./release\PythonQt.o:PythonQt.cpp:(.text+0x721d): undefined reference to `_imp__Py_NoSiteFlag'

./release\PythonQt.o:PythonQt.cpp:(.text+0xd10f): undefined reference to `_imp__PyClass_Type'

./release\PythonQt.o:PythonQt.cpp:(.text+0xd118): undefined reference to `_imp__PyCFunction_Type'

./release\PythonQt.o:PythonQt.cpp:(.text+0xd120): undefined reference to `_imp__PyFunction_Type'

./release\PythonQt.o:PythonQt.cpp:(.text+0xd129): undefined reference to `_imp__PyModule_Type'

./release\PythonQt.o:PythonQt.cpp:(.text+0xd131): undefined reference to `_imp__PyMethod_Type'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0xbd): undefined reference to `_imp__Py_OptimizeFlag'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x103): undefined reference to `_imp__PyExc_ImportError'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x3ca): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x407): undefined reference to `_imp__Py_VerboseFlag'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x49f): undefined reference to `_imp__Py_VerboseFlag'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x501): undefined reference to `_imp__PyCode_Type'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x53b): undefined reference to `_imp__PyExc_TypeError'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x727): undefined reference to `_imp__Py_VerboseFlag'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x7c9): undefined reference to `_imp__Py_VerboseFlag'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x805): undefined reference to `_imp__Py_VerboseFlag'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x166a): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x17ee): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x1827): undefined reference to `_imp__Py_VerboseFlag'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x2360): undefined reference to `_imp__Py_VerboseFlag'

./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x2a7b): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtSlot.o:PythonQtSlot.cpp:(.text+0x4): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtSlot.o:PythonQtSlot.cpp:(.text+0x75): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtSlot.o:PythonQtSlot.cpp:(.text+0x89): undefined reference to `_imp__PyExc_RuntimeError'

./release\PythonQtSlot.o:PythonQtSlot.cpp:(.text+0x207): undefined reference to `_imp__PyType_Type'

./release\PythonQtSlot.o:PythonQtSlot.cpp:(.text+0x8ec): undefined reference to `_imp__PyExc_ValueError'

./release\PythonQtSlot.o:PythonQtSlot.cpp:(.text+0xf6a): undefined reference to `_imp__PyExc_ValueError'

./release\PythonQtSlot.o:PythonQtSlot.cpp:(.text+0x1009): undefined reference to `_imp__PyExc_ValueError'

./release\PythonQtSlot.o:PythonQtSlot.cpp:(.text+0x124e): undefined reference to `_imp__PyExc_ValueError'

./release\PythonQtSlot.o:PythonQtSlot.cpp:(.text+0x1897): undefined reference to `_imp__PyExc_ValueError'

./release\PythonQtSlot.o:PythonQtSlot.cpp:(.text+0x1c27): more undefined references to `_imp__PyExc_ValueError' follow

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0xa): undefined reference to `_imp___Py_ZeroStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x15): undefined reference to `_imp___Py_TrueStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x20d): undefined reference to `_imp__PyFloat_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x219): undefined reference to `_imp__PyInt_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x233): undefined reference to `_imp__PyLong_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x23e): undefined reference to `_imp___Py_ZeroStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x246): undefined reference to `_imp___Py_TrueStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x2ae): undefined reference to `_imp__PyInt_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x2d6): undefined reference to `_imp__PyLong_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x2f3): undefined reference to `_imp__PyFloat_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x2fe): undefined reference to `_imp___Py_ZeroStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x306): undefined reference to `_imp___Py_TrueStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x38d): undefined reference to `_imp__PyInt_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x397): undefined reference to `_imp__PyLong_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x3c2): undefined reference to `_imp__PyFloat_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x3cd): undefined reference to `_imp___Py_ZeroStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x3d5): undefined reference to `_imp___Py_TrueStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x461): undefined reference to `_imp__PyInt_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x483): undefined reference to `_imp__PyFloat_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x48b): undefined reference to `_imp__PyLong_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x493): undefined reference to `_imp___Py_ZeroStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x49b): undefined reference to `_imp___Py_TrueStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x519): undefined reference to `_imp___Py_ZeroStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x521): undefined reference to `_imp___Py_TrueStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x169f): undefined reference to `_imp__PyString_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x2837): undefined reference to `_imp__PyString_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x29b2): undefined reference to `_imp__PyString_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x2d0d): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x2dba): undefined reference to `_imp___Py_TrueStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x2e39): undefined reference to `_imp___Py_ZeroStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x2f65): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x34fc): undefined reference to `_imp__PyString_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x3508): undefined reference to `_imp__PyUnicode_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x3514): undefined reference to `_imp__PyInt_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x3dea): undefined reference to `_imp__PyLong_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x3df6): undefined reference to `_imp__PyFloat_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x3e02): undefined reference to `_imp___Py_ZeroStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x3e0e): undefined reference to `_imp___Py_TrueStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x3e4c): undefined reference to `_imp__PyDict_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x3e58): undefined reference to `_imp__PyList_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x3e64): undefined reference to `_imp__PyTuple_Type'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x3e92): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtConversion.o:PythonQtConversion.cpp:(.text+0x4838): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtSignalReceiver.o:PythonQtSignalReceiver.cpp:(.text+0xe8): undefined reference to `_imp__PyFunction_Type'

./release\PythonQtSignalReceiver.o:PythonQtSignalReceiver.cpp:(.text+0xf6): undefined reference to `_imp__PyMethod_Type'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x72): undefined reference to `_imp__PyBaseObject_Type'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x254): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x4ac): undefined reference to `_imp___Py_NotImplementedStruct'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x505): undefined reference to `_imp___Py_NotImplementedStruct'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x586): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0xf58): undefined reference to `_imp__PyBaseObject_Type'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x11c3): undefined reference to `_imp__PyBaseObject_Type'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x1863): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x1a2a): undefined reference to `_imp__PyExc_ValueError'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x1dac): undefined reference to `_imp__PyExc_AttributeError'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x205c): undefined reference to `_imp__PyExc_ValueError'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x2302): undefined reference to `_imp__PyExc_AttributeError'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x2cc0): undefined reference to `_imp__PyBaseObject_Type'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x2f51): undefined reference to `_imp__PyExc_AttributeError'

./release\PythonQtInstanceWrapper.o:PythonQtInstanceWrapper.cpp:(.text+0x3177): undefined reference to `_imp__PyExc_AttributeError'

./release\PythonQtClassWrapper.o:PythonQtClassWrapper.cpp:(.text+0x7): undefined reference to `_imp__PyType_Type'

./release\PythonQtClassWrapper.o:PythonQtClassWrapper.cpp:(.text+0x29): undefined reference to `_imp__PyType_Type'

./release\PythonQtClassWrapper.o:PythonQtClassWrapper.cpp:(.text+0x1ec): undefined reference to `_imp__PyType_Type'

./release\PythonQtClassWrapper.o:PythonQtClassWrapper.cpp:(.text+0x21c): undefined reference to `_imp__PyExc_TypeError'

./release\PythonQtClassWrapper.o:PythonQtClassWrapper.cpp:(.text+0x34c): undefined reference to `_imp___Py_NoneStruct'

./release\PythonQtClassWrapper.o:PythonQtClassWrapper.cpp:(.text+0x559): undefined reference to `_imp___Py_ZeroStruct'

./release\PythonQtClassWrapper.o:PythonQtClassWrapper.cpp:(.text+0xed9): undefined reference to `_imp__PyExc_ArithmeticError'

./release\PythonQtClassWrapper.o:PythonQtClassWrapper.cpp:(.text+0x28b8): undefined reference to `_imp__PyType_Type'

./release\PythonQtClassWrapper.o:PythonQtClassWrapper.cpp:(.text+0x29ae): undefined reference to `_imp__PyExc_AttributeError'

./release\PythonQtScriptingConsole.o:PythonQtScriptingConsole.cpp:(.text+0x2555): undefined reference to `_imp__PyModule_Type'

./release\moc_com_trolltech_qt_core_builtin0.o:moc_com_trolltech_qt_core_builtin0.cpp:(.text+0x94fd): undefined reference to `_imp___Py_NoneStruct'

collect2: ld returned 1 exit status

mingw32-make[2]: *** [..\lib\PythonQt.dll] Error 1

mingw32-make[1]: *** [release] Error 2

mingw32-make: *** [sub-src-make_default-ordered] Error 2

Процесс "C:/Qt/2010.05/mingw/bin//mingw32-make.exe" завершился с кодом %2.
Возникла ошибка при сборке проекта PythonQt (цель: Настольный компьютер)
Во время выполнения сборки на этапе "Сборка"

Имен, которых не находит линковщик, в библиотеке импорта python26.lib нет.
Версии: PythonQt 2.0.1, Python 2.6.6, Qt SDK OPenSource 2010.05 или 1.1 beta.
В чем проблема?
Есть кто-нибудь, у кого есть опыт использования PythonQt?


Название: Re: Сборка PythonQt под Windows
Отправлено: Wlad_C от Апрель 21, 2011, 10:57
Функции, которые не находит линковщик, это функции Python.
Чтобы собрать PythonQt надо:
1. установить сам Питон
2. настроить файлы common.prf, python.prf, PythonQt.prf



Название: Re: Сборка PythonQt под Windows
Отправлено: sergek от Апрель 21, 2011, 16:35
Цитировать
Функции, которые не находит линковщик, это функции Python.
Положим, не только функции, но и переменные. И не факт, что Питона. Попробуйте, например, найти в общем индексе документации переменную Py_NoSiteFlag. Не найдете, а она есть... ;-)

Цитировать
Чтобы собрать PythonQt надо:
1. установить сам Питон
2. настроить файлы common.prf, python.prf, PythonQt.prf
Да знаю я... Из моего письма разве не понятно, что питон стоит 2.6.6? И prf настроены как надо.
А вы сами не пробовали? Попробуйте, может, у Вас получится. Времени всего полчаса потребуется (если Qt SDK opensource уже стоит).
Вот ссылки на дистрибутивы:
http://sourceforge.net/projects/pythonqt/files/pythonqt/PythonQt-2.0.1/PythonQt2.0.1.zip/download (http://sourceforge.net/projects/pythonqt/files/pythonqt/PythonQt-2.0.1/PythonQt2.0.1.zip/download)
http://www.python.org/ftp/python/2.6.6/python-2.6.6.msi (http://www.python.org/ftp/python/2.6.6/python-2.6.6.msi)


Название: Re: Сборка PythonQt под Windows
Отправлено: asvil от Апрель 21, 2011, 16:42
Помню, что Пайтон собирается msvc 6.0, а вот Qt - mingw. Может ли Ваша проблема заключатся в знаменитой несовместимости макрософт линкера с остальными участниками программистского цирка?


Название: Re: Сборка PythonQt под Windows
Отправлено: sergek от Апрель 21, 2011, 21:55
Помню, что Пайтон собирается msvc 6.0, а вот Qt - mingw. Может ли Ваша проблема заключатся в знаменитой несовместимости макрософт линкера с остальными участниками программистского цирка?
Это я тоже помню. Но вот беда, если посмотреть список всех символов, содержащихся в библиотеке питона:
> nm python26.lib >> symbols.txt
то нет там ни одного имени, о котором говорит линковщик... И я не могу это объяснить.
Может, кто-нибудь все же попробует собрать PythonQt?
А я попробую собрать Питона мингвой.


Название: Re: Сборка PythonQt под Windows
Отправлено: asvil от Апрель 22, 2011, 10:20
Таки *.lib файлы не поттягиваются MinGw до сих пор. Создайте *.a файл из *.dll/lib.
Код:
reimp python.lib
Или так
Код:
dlltool -k -dpython.def -lpython.a


Название: Re: Сборка PythonQt под Windows
Отправлено: sergek от Апрель 22, 2011, 15:23
Таки *.lib файлы не поттягиваются MinGw до сих пор.
Вот сейчас подключил к проекту python26.lib, в программе сделал питоновские вызовы Py_Initialize () и Py_Finalize (). Компоновщик проглотил это молча, программа отработала.
В чем отсутствие поддержки lib?


Название: Re: Сборка PythonQt под Windows
Отправлено: asvil от Апрель 22, 2011, 15:53
Таки, значит поттягиваются. Только у вас в неразрешенных зависимостях нет того, что Вы сейчас назвали.
У Вас вроде не "резолвятся" указатели на extern переменные, а не на функции. Соотвественно сделайте хоть lib хоть a чтобы механизмы друг друга нашли.


Название: Re: Сборка PythonQt под Windows
Отправлено: sergek от Апрель 26, 2011, 11:09
Все-таки проблема несовместимости библиотеки импорта python26.lib, поставляемой в составе дистрибутива Питона, с mingw.
Собрать PythonQt удалось. Проверю, выложу рецепт. Вкратце - создание библиотеки импорта для mingw из python2.dll с использованием утилит pexports, dlltool.
Прошу прощения у Филоненко М. - его сомнения я опроверг неправильно поставленным экспериментом  :(


Название: Re: Сборка PythonQt под Windows
Отправлено: sergek от Апрель 26, 2011, 18:43
Обещанный рецепт сборки PythonQt (232 revision).

1) Используем Qt SDK 1.2.1 (Open Source), установленный в C:\QtSDK, Windows 7 домашняя базовая 64 бит. Для WinXP примерно все то же самое.

2) Скачиваем архив с утилитами mingw (MinGW Utilities 0.3 Windows Binary)
 http://olex.openlogic.com/packages/mingw-utils/0.3#package_detail_tabs (http://olex.openlogic.com/packages/mingw-utils/0.3#package_detail_tabs)

Разархивируем каталоги bin и doc полученного архива в соответствующие каталоги C:\QtSDK\mingw\bin и doc.

3) Ставим Python 2.6 из дистрибутива в каталог по умолчанию C:\Python26
 http://www.python.org/ftp/python/2.6.6/python-2.6.6.msi (http://www.python.org/ftp/python/2.6.6/python-2.6.6.msi)

4) В командной строке из состава Qt SDK переходим в каталог C:\Python26\libs и выполняем:

Setting up environment for Qt usage...
C:\windows\system32>cd C:\Python26\libs
C:\Python26\libs>pexports C:\Windows\SysWOW64\python26.dll >python26.def
C:\Python26\libs>dlltool --dllname python26.dll --def python26.def --output-lib libpython26.a

При использовании утилиты pexports путь до dll указывать нужно, иначе получим ошибку "pexports: python26.dll: could not load PE image".
Для dlltool это не обязательно. Путь у меня указан для Windows7. В WinXP библиотека лежит в system32.
Результатом этих шагов является библиотека импорта libpython26.a, которую и будем использовать для сборки PythonQt.

5) Скачиваем исходники PythonQt из SVN репозитория (дистрибутив весьма устарел):
 http://pythonqt.svn.sourceforge.net/viewvc/pythonqt/ (http://pythonqt.svn.sourceforge.net/viewvc/pythonqt/)
и разархивируем в каталог C:\PythonQt2.1

6) Корректируем def-файлы в каталоге C:\PythonQt2.1\build.

python.prf - указываем в явном виде каталоги и файлы. Сюда же прописываем путь до исходников PythonQt (наверное, это не очень здорово, но зато работает под Windows7). Поскольку отладочной версии Питона в дистрибутиве нет, то для отладки и релиза используем одну и ту же библиотеку импорта:
Код:
  win32:INCLUDEPATH += c:/Python26/include C:/PythonQt2.1/src
  win32:LIBS += c:/Python26/libs/libpython26.a

common.prf - раскомментируем строку (хотя это можно и не делать, наверное - собирать будем в креаторе):
Код:
  CONFIG += debug_and_release build_all

PythonQt.prf - корректируем имя и расширение библиотеки:
Код:
  win32::LIBS += $$PWD/../lib/libPythonQt$${DEBUG_EXT}.a
PythonQt_QtAll.prf - то же самое:
Код:
  win32::LIBS += $$PWD/../lib/libPythonQt_QtAll$${DEBUG_EXT}.a

7) Запускаем Qt Creator и открываем проект C:\PythonQt2.1\PythonQt.pro. При открытии выбираем создание конфигурации одной отладочной и одной релизной сборки для профиля "Qt 4.8.1 for Desktop - MinGW (Qt SDK)", каталог сборки - C:\PythonQt2.1.
Сохраняем и выполняем qmake. Обратите внимание - будет создан каталог C:\PythonQt2.1\lib, там будут размещаться собранные библиотеки и исполняемые файлы примеров.

8 ) Корректируем исходники для обеспечения поддержки UTF-8 - заменяем toLatin1 на toAscii (см. http://sourceforge.net/projects/pythonqt/forums/forum/631392/topic/3805500 (http://sourceforge.net/projects/pythonqt/forums/forum/631392/topic/3805500) ):

 PythonQtScriptingConsole.cpp (PythonQtScriptingConsole::executeCode, 183):
    
Код:
p.setNewRef(PyRun_String(code.toAscii().data(), Py_single_input, dict, dict));

 PythonQt.cpp (PythonQt::evalScript, 727):
    
Код:
p.setNewRef(PyRun_String(script.toAscii().data(), start, dict, dict));

9) Выполняем команду "Собрать все". После завершения в каталоге C:\PythonQt2.1\lib будут размещены файлы библиотек (.a и .dll) и исполняемых файлов примеров.
Все.
  


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: sergek от Декабрь 04, 2011, 20:12
Обновил предыдущее сообщение с описанием процесса сборки PythonQt с учетом нового релиза исходников библиотеки из репозитория http://pythonqt.svn.sourceforge.net/viewvc/pythonqt/ (http://pythonqt.svn.sourceforge.net/viewvc/pythonqt/).


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: med_phisiker от Май 26, 2012, 08:07
Здравствуйте, я тоже пытаюсь собрать PythonQt под Windows(у меня Windows 7 sp1 32). Версия qt sdk 1.2 . Python 2.6.6 .PythonQt2.0.1
Я действовал по инструкции sergek'a.
1) Скачал qt sdk 1.2 , установил его в C:\QtSDK. Mingw в нем уже был, но я решил поставить, скачал последнюю версию и установил в C:\MinGW.
2) Установил Python 2.6.6 из дистрибутива http://www.python.org/ftp/python/2.6.6/python-2.6.6.msi в каталог по умолчанию C:\Python26
3) утилиты pexports у меня не было, скачал ее отдельно поставил в C:\pexports.
чтобы они опознавались в командной строке Qt , Madde Terminal добавил в системную переменую PATH адреса для pexports, mingw.
после этого в командной строке Qt , Madde Terminal, смог выполнить указанные команды:
C:\windows\system32>cd C:\Python26\libs
python26.dll у меня был расположен по следующему адресу C:/Windows/System32/python26.dll поэтому вторая строка изменилась следующим образом.
C:\Python26\libs> pexports C:/Windows/System32/python26.dll >python26.def
C:\Python26\libs> dlltool --dllname python26.dll --def python26.def --output-lib libpython26.a
4) Результатом этих шагов я получил библиотеку импорта libpython26.a
5)  Далее я скорректировал def-файлы в каталоге C:\PythonQt2.0.1\build указанным образом:

python.prf - указываем в явном виде каталоги и файлы. Сюда же прописываем путь до исходников PythonQt (наверное, это не очень здорово, но зато работает под Windows7). Поскольку отладочной версии питона в дистрибутиве нет, то для отладки и релиза используем одну и ту же библиотеку импорта:
Код:
 win32:INCLUDEPATH += c:/Python26/include C:/PythonQt2.0.1/src
  win32:LIBS += c:/Python26/libs/libpython26.a

common.prf - раскомментируем строку (хотя это можно и не делать, наверное - собирать будем в креаторе):
Код:
 CONFIG += debug_and_release build_all

PythonQt.prf - корректируем имя библиотеки:
Код:
 win32::LIBS += $$PWD/../lib/libPythonQt$${DEBUG_EXT}.a
PythonQt_QtAll.prf - то же самое:
Код:
 win32::LIBS += $$PWD/../lib/libPythonQt_QtAll$${DEBUG_EXT}.a
указал конфигурацию проэкта для qt:
Профиль Qt - Qt 4.7.4 for Desktop - MinGW 4.4 (Qt SDK);
Каталог сборки - C:\PythonQt2.0.1;
Запускаю собрать все. В процессе сборки появилось две ошибки:
1) C:\PythonQt2.0.1\src\PythonQtConversion.cpp:677: ошибка: invalid conversion from 'Py_UNICODE*' to 'const ushort*'
2) C:\PythonQt2.0.1\src\PythonQtConversion.cpp:1045: ошибка: invalid conversion from 'const ushort*' to 'const Py_UNICODE*'

От второй ошибки можно избавиться следующим способом:
в PythonQtConversion.cpp:1045 в PythonQtConv::QStringToPyObject()
найти
 #ifdef WIN32
    //return PyString_FromString(str.toLatin1().data());
    return PyUnicode_FromUnicode(str.utf16(), str.length());
нужно сделать так
 #ifdef WIN32
    return PyString_FromString(str.toLatin1().data());
   // return PyUnicode_FromUnicode(str.utf16(), str.length());
это решает вторую ошибку и убирает куча ворнингов.
Избавиться от первой мне так и не удалось помогите пожалуйста!!! :(


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: sergek от Май 26, 2012, 11:43
Судя по всему, вы работаете с исходным дистрибутивом, который давно устарел. Для него нужно с делать явное преобразование типов:
  в файле PythonQtConversion.cpp из состава проекта src делаем явное преобразование типов в строках 677 и 1043:
    r = QString::fromUtf16((const ushort*)PyUnicode_AS_UNICODE(val));
  и
    return PyUnicode_FromUnicode((const Py_UNICODE*)str.utf16(), str.length());

Вам нужно скачать trunk с текущем релизом (221), там эта ошибка давно устранена:
http://pythonqt.svn.sourceforge.net/viewvc/pythonqt/trunk/ (http://pythonqt.svn.sourceforge.net/viewvc/pythonqt/trunk/)
и на этой странице "Download GNU tarball".
Из каталога C:\PythonQt2.0.1 удаляете все содержимое и разархивируете туда полученный файл. Далее - по моим рекомендациям (правда, они - для 219 ревизии, но изменений не должно быть много).


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: med_phisiker от Май 29, 2012, 08:55
Спасибо за помощь =). Скачал новый trunk с текущем релизом (221), но при сборке вылезла новая ошибка:
ошибка: C:/PythonQt2.0.1/build/../lib/PythonQt_d.a: No such file or directory

При выполнении qmake в pythonqt/lib как вы и писали появляются файлы библиотек: libPythonQt.a; libPythonQt.dll ; libPythonQt_d.dll ; libPythonQt_d.dll

Но почему Qt ищет PythonQt_d.a ? Могу ли я как то указать на то что нужно использовать libPythonQt.a; libPythonQt.dll ; libPythonQt_d.dll ; libPythonQt_d.dll, если я правильно понял именно они нужны для "собрать все"


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: sergek от Май 29, 2012, 09:28
Внимательнее посмотрите python.prf.


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: med_phisiker от Май 29, 2012, 10:06
Не помогло, решил проблему следующим образом:
При сборке qt выдавал библиотеку: libPythonQt.a а потом жаловался что не может найти PythonQt.a . Я просто переименовывал libPythonQt.a -> PythonQt.a   И так далее =) Благо файлов было немного. Ну в общем библиотеки и примеры собрались =)

При этом мной была допущена ошибка, которую удалось обнаружить благодаря sergek:
в папке build при редактировании файлов
PythonQt.prf
в строке win32::LIBS += $$PWD/../lib/PythonQt$${DEBUG_EXT}.lib
просто заменил расширение с  .lib на  .a и у меня была такая строчка
win32::LIBS += $$PWD/../lib/PythonQt$${DEBUG_EXT}.a
вместо : win32::LIBS += $$PWD/../lib/libPythonQt$${DEBUG_EXT}.a поэтому qt и искал PythonQt.a и dll вместо libPythonQt.a и dll

такая же ошибка была допущена мной при редактировании файла PythonQt_QtAll.prf
в строке win32::LIBS += $$PWD/../lib/PythonQt_QtAll$${DEBUG_EXT}.lib
я написал win32::LIBS += $$PWD/../lib/PythonQt_QtAll$${DEBUG_EXT}.a
а нужно было win32::LIBS += $$PWD/../lib/libPythonQt_QtAll$${DEBUG_EXT}.a


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: SpulN от Декабрь 21, 2012, 20:10
Здравствуйте, необходимо собрать PythonQt, делал все как здесь описано, но процесс сборки останавливается с ошибкой:
Creating library file: ../lib/libPythonQt.a
mingw32-make[2]: Leaving directory `c:/PythonQt2.1/src'
mingw32-make[1]: Leaving directory `c:/PythonQt2.1/src'
cd extensions/ && C:/mingw/bin/mingw32-make -f Makefile
mingw32-make[1]: Entering directory `c:/PythonQt2.1/extensions'
cd PythonQt_QtAll/ && c:/mingw/bin/mingw32-make -f Makefile
mingw32-make[1]: Leaving directory `c:/PythonQt2.1/extensions'
/usr/bin/sh: c:/mingw/bin/mingw32-make: Invalid argument
mingw32-make[1]: *** [sub-PythonQt_QtAll-make_default] Error 126
mingw32-make: *** [sub-extensions-make_default-ordered] Error 2
20:45:33: Процесс «C:\mingw\bin\mingw32-make.exe» завершился с кодом 2.
Ошибка при сборке/установке проекта PythonQt (инструментарий: Desktop)
Во время выполнения этапа «Сборка»

Не подскажете как решить данную проблему?


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: kambala от Декабрь 21, 2012, 20:38
ошибка пишется во вкладке «вывод компилятора»


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: sergek от Декабрь 21, 2012, 23:15
Конечно же, надо давать сообщения из консоли сборки, а атк очень мало информации. Судя по
Цитировать
/usr/bin/sh: c:/mingw/bin/mingw32-make: Invalid argument
это нестандартная установка Qt  SDK (либо вообще не SDK).
И есть подозрение, что не выполнен qmake.
Совет - поставьте SDK и повторите.


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: SpulN от Декабрь 22, 2012, 20:37
Установочный файл называется qt-win-opensource-4.8.1-mingw.exe, по умолчанию установился в директорию C:\Qt\4.8.1, скачал с ftp://ftp.qt-project.org/qt/source/ (http://ftp://ftp.qt-project.org/qt/source/). Может это не sdk? Также пришлось отдельно устанавливать Qt creator. Да и подскажите где можно посмотреть вывод компилятора. Просто я сам с qt сталкнулся впервые, и мне надо лишь скомпилировать проект из исходных кодов.


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: kambala от Декабрь 22, 2012, 21:35
ты скачал правильную вещь.

так трудно почитать названия вкладок (они внизу) в креаторе? или просто нажми Ctrl+4.

если я не ошибаюсь, то PyQt надо собирать из командной строки, а не из креатора.


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: sergek от Декабрь 22, 2012, 23:02
Qt SDK http://www.developer.nokia.com/info/sw.nokia.com/id/da8df288-e615-443d-be5c-00c8a72435f8/Qt_SDK.html (http://www.developer.nokia.com/info/sw.nokia.com/id/da8df288-e615-443d-be5c-00c8a72435f8/Qt_SDK.html). Чтобы скачать, нужно зарегистрироваться.
Можно использовать Creator из SDK, но потом лучше поставить 2.6.1 http://qt-project.org/downloads#qt-creator (http://qt-project.org/downloads#qt-creator). Хотя бы из-за одной кнопки - Ctrl-Alt-B.
Консоль сборки - Alt+4 или меню Окно/Панели вывода/Консоль сборки.

Цитировать
если я не ошибаюсь, то PyQt надо собирать из командной строки, а не из креатора.
Дело вкуса, только речь не о PyQt, а о PythonQt.  Это, так сказать совсем наоборот ;)


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: kambala от Декабрь 22, 2012, 23:11
Цитировать
если я не ошибаюсь, то PyQt надо собирать из командной строки, а не из креатора.
Дело вкуса, только речь не о PyQt, а о PythonQt.  Это, так сказать совсем наоборот ;)
да, ошибся :) но в инструкциях по сборке метод «с помощью ИДЕ» всё равно не предлагается :)


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: sergek от Декабрь 23, 2012, 15:59
Цитировать
в инструкциях по сборке метод «с помощью ИДЕ» всё равно не предлагается
Вообще-то, под виндами это сопряжено с определенными неудобствами. Скажем, на команду make у меня с удовольствием откликается еще один компилятор, а сделать, увы, ничего не может. Но, ради любви к искусству, вместо make набрал mingw32-make.exe. Все прошло без проблем.
Кстати, уточню, что использовал не виндовый cmd, а "Qt 4.8.1 for Desktop (MinGW)" из Qt SDK. Надеюсь, не получу упрека в том, что мне влом настраивать окружение для cmd? ;)


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: kolob от Ноябрь 20, 2013, 09:40
Подскажите, а PythonQt можно только в SDK собрать?
SDK уже устарело. Разработка ведется на версии Qt поновее и без SDK. Как быть?

Вот такая ошибка:
Код:
Creating library file: ..\lib\libPythonQt.a
./release\PythonQt.o:PythonQt.cpp:(.text+0x2e97): undefined reference to `_imp__Py_InitModule4'
./release\PythonQtImporter.o:PythonQtImporter.cpp:(.text+0x15a0): undefined reference to `_imp__Py_InitModule4'
collect2: ld returned 1 exit status
mingw32-make[2]: Leaving directory `C:/PythonQt2.1/src'
mingw32-make[1]: Leaving directory `C:/PythonQt2.1/src'
mingw32-make[2]: *** [..\lib\PythonQt.dll] Error 1
mingw32-make[1]: *** [release-all] Error 2
mingw32-make: *** [sub-src-make_default-ordered] Error 2
14:54:13: Процесс «C:\MinGW\bin\mingw32-make.exe» завершился с кодом 2.
Ошибка при сборке/установке проекта PythonQt (комплект: Desktop)
Во время выполнения этапа «Сборка»


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: kolob от Ноябрь 20, 2013, 16:43
Все дело оказалось в 64 битном Python. Поставил 32х и все собралось нормально. Только вот еще не проверял.


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: sergek от Ноябрь 20, 2013, 16:48
Подскажите, а PythonQt можно только в SDK собрать?
Нет, конечно. Я собираю сейчас в Qt Creator 2.8.1, который идет вместе с Qt 5.1.1. Пробовал как-то и из командной строки.


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: Igors от Ноябрь 20, 2013, 18:40
Подскажите, а PythonQt можно только в SDK собрать?
Я откомпилировал в Xcode - без проблем, как static так и dynamic


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: antoshib от Ноябрь 26, 2014, 13:23
Пытаюсь собрать с python34 в соответствии с инструкцией на WinХР и компиллятор выдаёт такие ошибки:

Код:
...
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DPYTHONQT_EXPORTS -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"c:\Qt\2009.05\qt\include\QtCore" -I"c:\Qt\2009.05\qt\include\QtGui" -I"c:\Qt\2009.05\qt\include" -I"c:\Python34\include" -I"." -I"c:\Qt\2009.05\qt\include\ActiveQt" -I"release" -I"c:\Qt\2009.05\qt\mkspecs\win32-g++" -o release\PythonQtStdDecorators.o PythonQtStdDecorators.cpp
PythonQtStdDecorators.cpp: In member function 'QObject* PythonQtStdDecorators::findChild(QObject*, PyObject*, const QString&)':
PythonQtStdDecorators.cpp:180: error: 'PyString_Check' was not declared in this scope
PythonQtStdDecorators.cpp:181: error: 'PyString_AsString' was not declared in this scope
PythonQtStdDecorators.cpp: In member function 'QList<QObject*> PythonQtStdDecorators::findChildren(QObject*, PyObject*, const QString&)':
PythonQtStdDecorators.cpp:199: error: 'PyString_Check' was not declared in this scope
PythonQtStdDecorators.cpp:200: error: 'PyString_AsString' was not declared in this scope
PythonQtStdDecorators.cpp: In member function 'QList<QObject*> PythonQtStdDecorators::findChildren(QObject*, PyObject*, const QRegExp&)':
PythonQtStdDecorators.cpp:222: error: 'PyString_Check' was not declared in this scope
PythonQtStdDecorators.cpp:223: error: 'PyString_AsString' was not declared in this scope
mingw32-make[2]: Leaving directory `D:/agusev/gusev/Devel/PythonQt2.1_Qt4.6.2/src'
mingw32-make[1]: Leaving directory `D:/agusev/gusev/Devel/PythonQt2.1_Qt4.6.2/src'
mingw32-make: Leaving directory `D:/agusev/gusev/Devel/PythonQt2.1_Qt4.6.2'
mingw32-make[2]: *** [release/PythonQtStdDecorators.o] Error 1
mingw32-make[1]: *** [release-all] Error 2
mingw32-make: *** [sub-src-make_default-ordered] Error 2
Завершено с кодом возврата 2.
Ошибка во время сборки проекта PythonQt
Во время выполнения сборки на этапе 'Make'


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: Sahab от Ноябрь 26, 2014, 21:30
Кривой порт под третий питон, собирай со вторым.


Название: Re: [Решено] Сборка PythonQt под Windows
Отправлено: sergek от Ноябрь 27, 2014, 10:25
http://sourceforge.net/p/pythonqt/code/HEAD/tree/trunk/ не пробовали?