如何在Windows下使用PyQt(和sip)编译(和链接)python模块

我有一个使用Qt5(也编译Qt4)的C ++项目,我想在python中使用(最好是3.4)。 为了做到这一点,我使用PyQt4(由于QtXml模块,据我所知,不再在PyQt5中可用)和啜饮。 这一切都完美地在我的Linux机器上。 但不幸的是,我需要它的Windows,并不能得到它运行。 我到目前为止所做的:

  • 没有Qt或其他依赖关系的一个非常小的例子(一个函数返回一个整数)的作品。 即使使用gcc。 但是在我的项目中出现“错误的reloc”错误后,我切换到了MSVC
  • 我的python 3.4是用“win32上的”MSC v.1600 32位(Intel)“”构build的,所以根据什么版本的Visual Studio是我的电脑上编译的Python? 我下载了Qt 5.2.1 MSVC 2010和Microsoft Visual Studio Express 2010 SP1
  • 我假定预编译的PyQt4-4.11.2-gpl-Py3.4-Qt5.3.1-x32应该适合
  • 为了得到sip.h和sipconfig.py文件,我编译了sip(4.16.3)。

从现在开始,我不确定要做什么。 我不得不承认,我对图书馆不了解。

  • C ++ / Qt项目是用QtCreator和CONFIG += staticlibTEMPLATE = lib编译的。 产生的* .lib(这里是:xml2db.lib)被复制到我的sip文件所在的文件夹(例如sipxml2dbcmodule.cpp)

所以通过“VS命令提示符”nmake会引发致命(链接)错误。 我不确定所需的编译器标志应该是什么,或者如果staticlib是错误的。 我的标志是:

 LFLAGS = /NOLOGO /DYNAMICBASE /NXCOMPAT /DLL /MANIFEST /MANIFESTFILE:$(TARGET).manifest /SUBSYSTEM:WINDOWS /INCREMENTAL:NO /NODEFAULTLIB:library /LIBPATH:/LIBPATH:C:\Qt\5.2.1\msvc2010\lib LIBS = /LIBPATH:C:\Python34\libs python34.lib xml2db.lib /LIBPATH:C:\Qt\5.2.1\msvc2010\lib\Qt5Xmld.lib C:\Qt\5.2.1\msvc2010\lib\Qt5Sqld.lib C:\Qt\5.2.1\msvc2010\lib\Qt5Cored.lib $(TARGET): $(OFILES) $(LINK) $(LFLAGS) /OUT:$(TARGET) $(OFILES) $(LIBS) 

目标是“myTools.pyd”。 它导致

 sipmyToolscmodule.cpp sipmyToolsxml2db.cpp Generating Code... link /NOLOGO /DYNAMICBASE /NXCOMPAT /DLL /MANIFEST /MANIFESTFILE:myTools .pyd.manifest /SUBSYSTEM:WINDOWS /INCREMENTAL:NO /NODEFAULTLIB:library /LIBPATH: C:\Qt\5.2.1\msvc2010\lib /OUT:myTools.pyd sipmyToolscmodule.obj sipmyToolsxml2db .obj /LIBPATH:C:\Python34\libs python34.lib xml2db.lib /LIBPATH:C:\Qt\5.2.1\msvc 2010\lib\Qt5Xmld.lib C:\Qt\5.2.1\msvc2010\lib\Qt5Sqld.lib C:\Qt\5.2.1\msvc2010\l ib\Qt5Cored.lib xml2db.lib(xml2db.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_L EVEL': value '2' doesn't match value '0' in sipmyToolscmodule.obj MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_i nfo(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in LIB CMT.lib(typinfo.obj) MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj) Creating library myTools.lib and object myTools.exp LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; u se /NODEFAULTLIB:library myTools.pyd : fatal error LNK1169: one or more multiply defined symbols found NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 10.0 \VC\BIN\link.EXE"' : return code '0x491' Stop. 

我会很高兴的回答或新的想法。 提前致谢。

编辑我不知道我是如何解决它,但这里有一些更多的提示,帮助我解决它。

  • 由于SIP 5不会有build立系统,我试图创build一个QMAKE项目。 为此,我下载了pyqt源码包,查看了项目文件并根据需要进行了调整。
  • 特别是当您更改qmake项目文件时,删除make,object和/或moc文件可能非常有用。
  • qt版本应该与pyqt版本完全匹配(实际上,我不是指版本本身,而是编译的qt版本)

祝你有个相似的问题