一半君的总结纸

听话只听一半君

Windows8.1下编译Maya 2016用的PyQt4

之前有试过编译for Maya 2014版本的PyQt4,并做了个安装包,最近偶然看到Around the corner的两位大神博主(博主Naiqi Weng多年前就是开发大神了)把自动编译的script放到了github,这大大减少了大家的操作步骤,小编特此来为大家测试一下好不好用,当然如果作为普通用户你直接从riverbank computing官网下的PyQt4恰好就能用的话,那其实是用不着这样自找麻烦的,除非你的公司有特殊的要求,那也许你就得自己来编译个特制版本的PyQt4了

目前直接装的后果是这样,我装的是riverbank官网现在有的PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x64.exe,看来是不行了(因为qt是4.8.7而maya2016用的是4.8.6)

from PyQt4 import QtGui
# Error: ImportError: file <maya console> line 2: DLL load failed: The specified procedure could not be found. 

下面开始:

#首先把script clone下来
git clone https://github.com/cyrillef/Maya-PyQt-Scripts.git

# 之后你去这个目录里的win文件夹下按顺序运行以下命令即可,如果没错误的话就全自动了基本
# Command Prompt 命令行窗口要用管理员身份开,因为要往program files目录里写文件
# 但之前我们要做一些准备工作,请看下面的解说
setup 
sip
pyqt

由于我要编译的pyqt和sip版本号和大神给的自动脚本里的有不同,所以我把他给改了一下,并加上解说

@echo off

set MAYAVERSION=2016
set ADSKQTVERSION=4.8.6
set SIPVERSION=4.16.9
set PYQTVERSION=4.11.4
set MAYADRIVE=x:
set BUILDDRIVE=v:

# subst /d表示删除映射,意思是说如果%MAYADRIVE%已经有了的话就删掉
if exist %MAYADRIVE%\nul subst %MAYADRIVE% /d
subst %MAYADRIVE% "C:\Program Files\Autodesk\Maya%MAYAVERSION%"
set MAYA_LOCATION=%MAYADRIVE%

# %~dp0表示当前运行的脚本的所在目录
set MAYAPYQTBUILD=%~dp0
rem Removing trailing \
# %PATH:n,m% 表示取PATH字符串的substring,用法是:~start,length
# 所以下面表示的是去掉MAYAPYQTBUILD代表的字符串里的最后一个字符(反斜杠)
set MAYAPYQTBUILD=%MAYAPYQTBUILD:~0,-1%

if exist %BUILDDRIVE%\nul subst %BUILDDRIVE% /d
subst %BUILDDRIVE% "%MAYAPYQTBUILD%"

set SIPDIR=%BUILDDRIVE%\sip-%SIPVERSION%
set PYQTDIR=%BUILDDRIVE%\PyQt-win-gpl-%PYQTVERSION%
rem set ADSKQTDIR=%BUILDDRIVE%\qt-%ADSKQTVERSION%
set QTDIR=%MAYA_LOCATION%

set PATH=%QTDIR%\bin;%PATH%
set MSVC_VERSION=2012
set MSVC_DIR=C:\Program Files (x86)\Microsoft Visual Studio 11.0
set QMAKESPEC=%QTDIR%\mkspecs\win32-msvc%MSVC_VERSION%
set _QMAKESPEC_=win32-msvc%MSVC_VERSION%

if ["%LIBPATH%"]==[""] call "%MSVC_DIR%\VC\vcvarsall" amd64

set INCLUDE=%INCLUDE%;%MAYA_LOCATION%\include\python2.7
set LIB=%LIB%;%MAYA_LOCATION%\lib

注解1: %n 表示调用当前脚本时候后面跟的参数: %0 当前bat文件的所在路径, %1 是后面跟的第一个参数, %2 是第二个参数以此类推. ~d 表示盘符, ~p 表示路径 (不带盘符), ~n 是文件名. 以上可以组合使用所以 ~dp 表示 盘符+路径. 完整的说明在这里Using batch parameters

注解2: PyQt和sip的源文件放这里
pyqt_2016

注解3: 2016的devkit没在默认安装的Maya里了,你得去Autodesk Exchange自己下载,下来之后

  • 把压缩包里的include/qt-4.8.6-include.tar.gz解压放到Maya安装目录下的 /devkit/include/Qt里
  • 把mkspecs/qt-4.8.6-mkspecs.tar.gz解压放到Maya安装目录下的 /mkspecs里
  • 把include/python2.7里的内容解压放到Maya安装目录下的 Python/include里

注解4: Maya安装目录下的bin/qt.conf的内容需改成如下内容(改Headers那行)

 
[Paths]
Prefix=
Libraries=../lib
Binaries=../bin
Headers=../include/Qt
Data=../
Plugins=../qt-plugins
Translations=../qt-translations

在小编的至少5岁的古董机上(i5,12g ram)大概花了13min,因为用是是mayapy来编译,所以最后编译好的东西就直去到Maya安装目录下了
compiled

你可能需要把下面这个路径加到PATH里,而且x:\这个也得改一下,因为这是自动编译脚本里映射的盘符,重启之后就没了应该
pyuic4

操作至此应该已经成功了,贴进原大神博客的小例子试运行一下,没问题
test_pyqt

但是这样出来的PyQt仅仅是最基本的组件而已,可以用了,没有帮助(有,在源代码文件夹里)也没有designer(maya自己已经带了 ),如果想做成riverbank官网那种安装包,装好之后有个菜单,顺带帮助文档等也拷到了c:\program files里面,并且安装到c:\python2.7里面,(小编不知道用普通版python2.7和mayapy编译的区别是什么,小编之前用普通Python2.7编译的PyQt在Maya里用着没觉得有什么问题,反过来的话就没有试过),那就得修改下大神的build script,外加自己再使用打包软件了。

下面试下再加点别的东西进去并打包:

编译QScintilla

QScintilla-gpl-2.9(非必须,因为.nsi脚本里有,不想改了)

cd D:\pyqt_2016\Maya-PyQt-Scripts\win\QScintilla-gpl-2.9
cd Qt4Qt5
set PATH=;x:\Python;D:\pyqt_2016\Qt\qt-adsk-4.8.6\bin;%PATH%
qmake qscintilla.pro
# 注解1,这里添加一些vs2012的环境变量
nmake
nmake install
 
# python binding
cd D:\pyqt_2016\Maya-PyQt-Scripts\win\QScintilla-gpl-2.9\Python
# 此处我还在之前编译pyqt的同一个console里,似乎--sip 不喜欢program files这个带空格的文件夹
x:\bin\mayapy.exe configure.py --sip="x:\Python\sip.exe"
nmake
nmake install
 
# designer plugin
cd D:\pyqt_2016\Maya-PyQt-Scripts\win\QScintilla-gpl-2.9\designer-Qt4Qt5
qmake designer.pro
nmake
nmake install

注解1: 因为我开的不是vs2012的command prompt,如果不小心把PATH搞乱了,找不到nmake或者看到提示

ERROR: Cannot determine the location of the VS Common Tools folder.

你可以重新开个console,也可以根据这儿的说明,我得把reg.exe所在的目录加到PATH里
ERROR: Cannot determine the location of the VS Common Tools folder
或者你echo %PATH%,手动编辑一下

QScintilla出来以后,lz测试打包的时候发现很多Qt的文件在Maya安装目录里没有,要改好多处,比如这些

File "${QT_SRC_DIR}\imports\Qt\labs\folderlistmodel\qmldir"

而且有些文件不知道作用,所以lz决定先来编译Qt,然后再打包

自己编译Qt 4.8.6

需要如下文件

如果你DirectX SDK装到最后提示redistribution package安装失败的话,可能需要运行以下命令,然后再次重试安装

MsiExec.exe /passive /X{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
MsiExec.exe /passive /X{1D8E6291-B0D5-35EC-8441-6616F567A0F7}

原因见这里Known Issue: DirectX SDK (June 2010) Setup and the S1023 error

cd D:\pyqt_2016\Qt\qt-adsk-4.8.6
set QTDIR=D:\pyqt_2016\Qt\qt-adsk-4.8.6\bin
Set DXSDK_DIR="C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)"
%DXSDK_DIR%\utilities\bin\dx_setenv.cmd

set INCLUDE=%INCLUDE%;c:\Program Files\PostgreSQL\9.4\include;C:\Program Files\MySQL\MySQL Server 5.6\include
set LIB=%LIB%;c:\Program Files\PostgreSQL\9.4\lib;C:\Program Files\MySQL\MySQL Server 5.6\lib

 echo yes | configure -opensource -platform win32-msvc2012 -release -qt-zlib -plugin-sql-mysql -plugin-sql-psql -plugin-sql-odbc -mp
nmake

在lz的中古机器上大概configure花了8min多,nmake花了大概1hr 15min
后来lz在编译pyqt时只要去掉–no-designer-plugin,后面nmake install的时候就有个地方过不去,lz不知道为啥,所以决定再来一篇,用普通的python2.7来编译,上面的尝试其实已经可以用了,pyqt已经装到Maya目录下面去了,只是nullsoft打包有点困难

        "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\amd64\nmake.exe" -f Makefile.Debug install

Microsoft (R) Program Maintenance Utility Version 11.00.50727.1
Copyright (C) Microsoft Corporation.  All rights reserved.

        link /LIBPATH:"x:\lib" /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /DLL /OUT:debug\pyqt4.dll @C:\Users\oglop\AppData\Local\Temp\nm5BE2.tmp
LINK : fatal error LNK1104: cannot open file 'QtScriptd.lib'
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\amd64\link.EXE"' : return code '0x450'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\amd64\nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\amd64\nmake.exe"' : return code '0x2'
Stop.

ps:,装Maya2016的时候发现.net framework 3.5装不上,提示Error: 0x800F081F,几个解决方法在这里
[Fix] 0x800F0906 and 0x800F081F Error Messages While Installing .NET Framework 3.5 in Windows 8/8.1
How to Install Microsoft .NET Framework 3.5 Offline in Windows 8 and Later without Internet Connection?

pss:
如果出现这种错误提示,那是因为有可能你手动设置了%PATH%,但是又没有用正确的缩写方式,解说在这里

NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\amd64\link.EXE"' : return code '0x49d'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\amd64\nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.

如果出现如下错误,说明

    from PyQt4.QtGui import *
ImportError: DLL load failed: The specified module could not be found.
Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: