Install PyQT for Maya(on Ubuntu)

前言

如果是一般要直接安裝PyQt到Python裏面的話,可以直接參考官方的流程
PyQt 4.12.1 Installing Guide
不過如果是要安裝PyQt到Maya的Python可以參考下面的安裝步驟。

題外話,其實不一定要用PyQt來開發,Maya內建的PySide2也可以,也不用另外安裝PyQt就可以直接用了。
PyQt和PySide的差別可以看 這篇文章

PyQt

根據官網上的說明

PyQt is a set of Python v2 and v3 bindings for The Qt Company’s Qt application framework and runs on all platforms supported by Qt including Windows, OS X, Linux, iOS and Android.

PyQt只是一個binding QT的工具,所以本身並不包含Qt的framework,所以一開始我們需要先安裝Qt。

SIP

官網

SIP is a tool that makes it very easy to create Python bindings for C and C++ libraries. It was originally developed to create PyQt, the Python bindings for the Qt toolkit, but can be used to create bindings for any C or C++ library.

wiki

SIP是一個自動為C和C++庫生成Python擴充功能模組的工具。為了方便開發PyQt,SIP於1998被「Riverbank Computing」公司創造出來。不過,SIP不專用於PyQt,而是適用於所有的C和C++庫。

所以要使用PyQt前必須要先安裝SIP喔!

安裝

Step 1

安裝Qt。
至於如何安裝Qt,網路上已經有很多教學,這裡就不贅述。

Step 2

安裝SIP。
下載SIP並解壓縮後
cd sip-4.19.3
‘/usr/autodesk/maya2017/bin/mayapy’ configure.py
make
sudo make install

安裝SIP到Maya後,可以看到/usr/autodesk/maya2017/lib/python2.7/site-packages路徑下已經有SIP相關檔案。

Step 3

安裝PyQt。
下載PyQt並解壓縮後
cd PyQt4_gpl_x11-4.12.1
‘/usr/autodesk/maya2017/bin/mayapy’ configure.py
/usr/lib/x86_64-linux-gnu/qt4/bin/qmake
make -j4
sudo make install

如果/usr/autodesk/maya2017/lib/python2.7/site-packages路徑下有PyQt資料夾,就是安裝成功囉!
而原本用來make build的資料夾也可以刪掉了。

Use PyQt4 !

不過雖然安裝完了,我在Maya python中執行

1
from PyQt4 import QtCore, QtGui

竟然出現

The file being saved was created by a Student Version of Maya intended for personal learning only. If you save the file, this message will always appear whenever the file is opened.

然後整個Maya就crash了…wtf
可能原因請看這裡

Trouble shooting

make: Nothing to be done for ‘first’

可能出現再安裝PyQt的時候,configure完要先執行qmake,這裡qmake不用輸入其他參數,如果沒有做這個步驟直接make就會出現這個error。

The file being saved was created by a Student Version of Maya intended for personal learning only. If you save the file, this message will always appear whenever the file is opened.

可能因為我是教育版的Maya會有License問題,所以被Block了。
官方autodesk software-license-agreements,而這是中文版的Software License

1.11 API。被授權人確認並同意,任何API資訊和開發材料 (除非經Autodesk在與該等API資訊或開發材料相關之其他條款或不同條款中另行其他載明者外) 均為:(a) 屬Autodesk機密專屬;(b) 不得散佈、揭露或以其他方式向第三人提供;(c) 僅得於內部使用,且僅得與被授權人本身對API資訊或開發材料相關之授權材料之授權內部使用一併使用或作為此目的使用,例如應用程式、模組與元件的開發和支援,以便於該等授權材料上操作或與其一併操作;且 (d) 僅得安裝於該等授權材料准許安裝之同樣電腦上。儘管有前述規定或第3條 (保留所有權利),但若被授權人依據本合約而開發出任何該等應用程式、模組與元件時,本合約之任何內容均不禁止被授權人將該等應用程式、模組與元件和其他軟體及硬體 (包括第三人之軟硬體) 一併使用 (以及將該等應用程式、模組與元件匯至該等其他軟硬體),但該等應用程式、模組與元件必須:(i) 不能載入或具體表達任何開發材料或其他Autodesk材料 (除非是用於按本合約對其進行開發而使用之API資訊),且 (ii) 不能揭露API資訊。就本條第1.11條 (API) 而言,(A)「API資訊」係指Autodesk一般向授權材料之被授權人提供之標準應用程式設計介面 (「API」) 資訊,載明介面至 (例如請求或調用其功能) 該等授權材料中包含軟體之規定;和 (B)「開發材料」係指SDK和其他工具箱、資料集、程序檔、索引或範例程式碼,及授權材料中包含之類似開發商材料。API資訊不包括該等介面資訊、任何開發材料,或任何其他軟體、模組或元件之任何實施。

可以改使用Maya內建的PySide2就沒問題了,不會被教育版Block,也不用另外安裝PyQt那麼麻煩。
直接from PySide2 import QtCore測試過沒問題

參考

http://www.maya-python.com/2011/09/building-and-installing-pyqt/#Linux