フォローする

Autodesk Maya 2018 64bit用PyQt5のビルド方法

こちらは下記の記事を元に作成されました。

http://around-the-corner.typepad.com/adn/2017/09/how-to-build-pyqt5-for-autodesk-maya-2018-64bit-.html

Building SIP、PyQt for Maya 2018 PyQt [http://www.riverbankcomputing.co.uk]はPythonのQtライブラリへのバインディングです。 Mayaは内部的にQtを使用するため、MayaのPythonスクリプトでPyQtモジュールを使用してカスタムUIを作成できます。 PyQtには、Maya、Qt、Pythonと同じライセンスはありません。 PyQtのライセンスについては、PyQtのWebサイトを参照してください。

Download PyQt: http://www.riverbankcomputing.com/software/pyqt/download

Download SIP: http://www.riverbankcomputing.com/software/sip/download

以下は、Mayaで動作することが分かっているPyQtモジュールのコピーを作成するための手順です。

Maya 2018は最新バージョンのPyQt-5.9 / SIP-4.19.2とバイナリ互換性のあるQt5.6.1を使用しています

QtソースコードのMaya修正版を使用することが重要です。カスタマイズされたQt 5.6.1ソースのコピーは、AutodeskのオープンソースWebサイト(http://www.autodesk.com/lgplsource)から入手でき、Mayaがサポートする各プラットフォーム用のQtを構築してインストールします。

ただし、Maya 2018では、PySideをビルドする必要はなくなりました。PyQtをビルドするための主要なQtツールがMayaディストリビューションに含まれています(つまり、qmake、moc、...)libxml、openSSL、OpenAL、python2.7、qt-5.6.1、およびtbbもMayaのincludeとlibフォルダにデフォルトで入っていますので、特に必要がない限り、それらのライブラリを以前のように再構築する必要はありません 。コミュニティソースのいくつかを含む 'MAYA_LOCATION / support / opensource'フォルダがあることに注意してください。

重要:Maya 2018は、devkit、include、およびmkspecsフォルダなしで出荷されます。 Windows、OSX、LinuxのAutodesk App StoreからMaya 2018の開発キットを入手できます。 devkitをダウンロードし、ファイルをMayaルートフォルダに解凍します。 システムにdevkit、include、mkspecsフォルダを正しくインストールするための指示を読んでください。

このドキュメントで使用されているスクリプトもGithubに掲載されています。

'http://www.riverbankcomputing.co.uk'からSIPとPyQtのソースをダウンロードします - ここで 'sip-4.19.3'と 'PyQt5_gpl-5.9'をダウンロードしました。 1つのフォルダに解凍します。

Mac

/Users/cyrille/Documents/_Maya2018Scripts/sip-4.19.3 
/Users/cyrille/Documents/_Maya2018Scripts/PyQt5_gpl-5.9 
/Users/cyrille/Documents/_Maya2018Scripts/ が私のローカルフォルダです。

SIPとPyQtを構築するための手順とスクリプトは次のとおりです。

APIドキュメントの指示に従って環境を設定します(デベロッパーリソース> APIガイド>ビルド環境の設定> Mac OS X環境、Mayaドキュメント)

Xcode 7.3.1を使用してXcodeをコンパイルする場合は、Xcodeを複数インストールする必要があります。 /Applications/Xcode.appをバックアップし、Xcode 7.3.1を使用して置き換えてください。

アクティブなxcodeを以下のように変更するには、xcode-selectを使用します。

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

qt.confファイルは、MAYA_LOCATIONとDEVKIT_LOCATIONを使用して、予想されるヘッダー/ライブラリー・ファイルを検索します。 したがって、PyQt5をビルドする前に、両方の環境変数を設定する必要があります。

DEVKIT_LOCATIONは、devkitがインクルードするディレクトリ、mkspecs、cmakeディレクトリがあるディレクトリを指している必要があります。

devkit / bin / qt.confを次のように変更します。

[Paths]
Prefix=
Libraries=$(MAYA_LOCATION)/MacOS
Binaries=$(DEVKIT_LOCATION)/devkit/bin
Headers=$(DEVKIT_LOCATION)/include/Qt
ArchData=$(DEVKIT_LOCATION)
Data=$(DEVKIT_LOCATION)
HostData=$(DEVKIT_LOCATION)
HostBinaries=$(DEVKIT_LOCATION)/devkit/bin
HostLibraries=$(MAYA_LOCATION)/MacOS

include / qt-5.6.1-include.tar.gzを/ include / Qtに書き出します。

qt-5.6.1-mkspecs.tar.gzを/ Applications / Autodesk / maya2017 / mkspecsに展開します。 qconfig.priが次のようになっていることを確認します。

qconfig.pri

#configuration
CONFIG += release def_files_disabled exceptions no_mocdepend stl x86_64 qt #qt_framework
QT_ARCH = macosx
QT_EDITION = OpenSource
QT_CONFIG += minimal-config small-config medium-config large-config full-config no-pkg-config dwarf2 phonon phonon-backend accessibility opengl reduce_exports ipv6 getaddrinfo ipv6ifname getifaddrs png no-freetype system-zlib nis cups iconv openssl corewlan concurrent xmlpatterns multimedia audio-backend svg script scripttools declarative release x86_64 qt #qt_framework
#versioning
QT_VERSION = 5.6.1
QT_MAJOR_VERSION = 5
QT_MINOR_VERSION = 6
QT_PATCH_VERSION = 1

#namespaces
QT_LIBINFIX =
QT_NAMESPACE =
QT_NAMESPACE_MAC_CRC =

SIPの構築とインストール

下記のスクリプトを使用してください。また、GitHubで見つけることもできます。

#!/usr/bin/env bash
 
MAYAQTBUILD="`dirname \"$0\"`" # Relative
export MAYAQTBUILD="`( cd \"$MAYAQTBUILD\" && pwd )`" # Absolutized and normalized
pushd $MAYAQTBUILD
 
export SIPDIR=$MAYAQTBUILD/sip-4.19.3
export MAYA_LOCATION=/Applications/Autodesk/maya2018
 
pushd $SIPDIR
$MAYA_LOCATION/Maya.app/Contents/bin/mayapy ./configure.py --arch=x86_64
make
sudo make install
popd

popd

PyQtの構築とインストール

下記のスクリプトを使用してください。また、GitHubで見つけることもできます。

#!/usr/bin/env bash
 
MAYAQTBUILD="`dirname \"$0\"`" # Relative
export MAYAQTBUILD="`( cd \"$MAYAQTBUILD\" && pwd )`" # Absolutized and normalized
pushd $MAYAQTBUILD
 
export MAYA_LOCATION=/Applications/Autodesk/maya2018/Maya.app/Contents
export DEVKIT_LOCATION=/Applications/Autodesk/maya2018
export QTDIR=$DEVKIT_LOCATION/devkit
export QMAKESPEC=$DEVKIT_LOCATION/mkspecs/macx-clang
export INCDIR_QT=$DEVKIT_LOCATION/include/Qt
export LIBDIR_QT=$MAYA_LOCATION/MacOS

error=0
if [ ! -f $QMAKESPEC/qmake.conf ];
then
  echo "You need to install qt-5.6.1-mkspecs.tar.gz in $QTDIR/mkspecs !"
  error=1
fi
if [ ! -f $INCDIR_QT/QtCore/qdir.h ];
then
  echo "You need to uncompress $MAYA_LOCATION/devkit/include/qt-5.6.1-include.tar.gz in $INCDIR_QT !"
  error=1
fi
# qt.conf - /Applications/Autodesk/maya2018/Maya.app/Contents/Resources
if [ ! -f $QTDIR/bin/qt.conf ];
then
  echo "You need to copy $QTDIR/Resources/qt.conf in $QTDIR/bin !"
  error=1
fi
 
test=`grep 'Data=$(DEVKIT_LOCATION)' $QTDIR/bin/qt.conf`
if [ -z "$test" ];
then
  echo "You need to edit $QTDIR/bin/qt.conf to use 'Data=\$(DEVKIT_LOCATION)'"
  error=1
fi
test=`grep 'Headers=$(DEVKIT_LOCATION)/include/Qt' $QTDIR/bin/qt.conf`
if [ -z "$test" ];
then
  echo "You need to edit $QTDIR/bin/qt.conf to use 'Headers=\$(DEVKIT_LOCATION)/include/Qt'"
  error=1
fi
test=`grep 'Libraries=$(MAYA_LOCATION)/MacOS' $QTDIR/bin/qt.conf`
if [ -z "$test" ];
then
  echo "You need to edit $QTDIR/bin/qt.conf to use 'Libraries=\$(MAYA_LOCATION)/MacOS'"
  error=1
fi

if [ $error -eq 1 ];
then
    exit
fi
 
export DYLD_LIBRARY_PATH=$MAYA_LOCATION/MacOS
export DYLD_FRAMEWORK_PATH=$MAYA_LOCATION/Frameworks
 
export SIPDIR=$MAYAQTBUILD/sip-4.19.3
export PYQTDIR=$MAYAQTBUILD/PyQt5_gpl-5.9
 
export SIP_EXE=$MAYA_LOCATION/Frameworks/Python.framework/Versions/2.7/bin/sip
export SIP_INCLUDE=$MAYA_LOCATION/Frameworks/Python.framework/Versions/2.7/include/python2.7

pushd $PYQTDIR
export PATH=$QTDIR/bin:$PATH

echo
echo Environment
echo -----------
set
echo -----------
echo QT Settings
echo -----------
qmake -query
echo -----------
echo
$MAYA_LOCATION/bin/mayapy ./configure.py QMAKE_MAC_SDK=macosx10.11 QMAKE_RPATHDIR+=$LIBDIR_QT --sip=$SIP_EXE --sip-incdir=$SIP_INCLUDE -w --no-designer-plugin
make -j 8
sudo make install
popd

popd

私は、開発環境と同じMac OS X SDK 10.11に対してコンパイルしています。 他のバージョンとコンパイルしたい場合は、スクリプト(macosx10.11)を修正してください。 終了です! 記事末尾のテスト段落を確認してください。

Linux

/home/cyrille/Documents/_Maya2018Scripts/sip-4.19.3 
/home/cyrille/Documents/_Maya2018Scripts/PyQt5_gpl-5.9
/home/cyrille/Documents/_Maya2018Scripts が私のローカルフォルダです。

SIPとPyQtを構築するための手順とスクリプトは次のとおりです。

APIドキュメントの指示に従って環境を設定してください(Mayaドキュメント内、開発者リソース> APIガイド>ビルド環境の設定> Linux環境(64ビット))。

qt.confファイルは、MAYA_LOCATIONとDEVKIT_LOCATIONを使用して、予想されるヘッダー/ライブラリー・ファイルを検索します。 したがって、PyQt5をビルドする前に、両方の環境変数を設定する必要があります。

DEVKIT_LOCATIONは、devkitがインクルードするディレクトリ、mkspecs、cmakeディレクトリがあるディレクトリを指している必要があります。

最初にqt.confをバックアップしてください.PyQt5をビルドした後にqt.confを復元する必要があります。 ... / bin / qt.confを以下のように置き換えます。

[Paths] 
Prefix=
Libraries=$(MAYA_LOCATION)/lib 
Binaries=$(DEVKIT_LOCATION)/bin
Headers=$(DEVKIT_LOCATION)/include/Qt
ArchData=$(DEVKIT_LOCATION)
Data=$(DEVKIT_LOCATION)
HostData=$(DEVKIT_LOCATION)
HostBinaries=$(DEVKIT_LOCATION)/bin

/include/qt-5.6.1-include.tar.gzを/ include / Qtに展開します。

/mkspecs/qt-5.6.1-mkspecs.tar.gzを/ mkspecsに展開します。

qmake、moc実行可能ファイルをMaya binディレクトリから作成します。

sudo chmod aog+x /usr/autodesk/maya2018/bin/moc 
sudo chmod aog+x /usr/autodesk/maya2018/bin/qmake

SIP の構築とインストール

下記のスクリプトを使用してください。また、GitHubで見つけることもできます。

#!/usr/bin/env bash
 
MAYAQTBUILD="`dirname \"$0\"`" # Relative
export MAYAQTBUILD="`( cd \"$MAYAQTBUILD\" && pwd )`" # Absolutized and normalized
pushd $MAYAQTBUILD
 
export SIPDIR=$MAYAQTBUILD/sip-4.19.3
export MAYA_LOCATION=/usr/autodesk/maya2018
 
pushd $SIPDIR
$MAYA_LOCATION/bin/mayapy ./configure.py
make
sudo make install
popd

popd

PyQtの構築とインストール

 下記のスクリプトを使用してください。また、GitHubで見つけることもできます。

#!/usr/bin/env bash
 
MAYAQTBUILD="`dirname \"$0\"`" # Relative
export MAYAQTBUILD="`( cd \"$MAYAQTBUILD\" && pwd )`" # Absolutized and normalized
pushd $MAYAQTBUILD
 
export MAYA_LOCATION=/usr/autodesk/maya2017
export QTDIR=$MAYA_LOCATION
export DEVKIT_LOCATION=$MAYA_LOCATION
export QMAKESPEC=$QTDIR/mkspecs/linux-g++-64
export INCDIR_QT=$MAYA_LOCATION/include/Qt
export LIBDIR_QT=$QTDIR/lib

error=0
if [ ! -f $QMAKESPEC/qmake.conf ];
then
  echo "You need to install qt-5.6.1-mkspecs.tar.gz in $QTDIR/mkspecs !"
  error=1
fi
if [ ! -f $INCDIR_QT/QtCore/qdir.h ];
then
  echo "You need to uncompress $MAYA_LOCATION/include/qt-5.6.1-include.tar.gz in $INCDIR_QT !"
  error=1
fi
# qt.conf - $QTDIR/bin/qt.conf
if [ ! -f $QTDIR/bin/qt.conf ];
then
  echo "You need to copy $QTDIR/Resources/qt.conf in $QTDIR/bin !"
  error=1
fi

# The grep string should be in single quote('), if it is in double quote (""),
# shell will expand the variable, hence the intension of the below grep will fail
test=`grep 'Headers=$(DEVKIT_LOCATION)/include/Qt' $QTDIR/bin/qt.conf`
if [ -z "$test" ];
then
  echo "You need to edit $QTDIR/bin/qt.conf to use 'Headers=$(DEVKIT_LOCATION)/include/Qt'"
  error=1
fi

if [ $error -eq 1 ];
then
    exit
fi
 
export SIPDIR=$MAYAQTBUILD/sip-4.19.3
export PYQTDIR=$MAYAQTBUILD/PyQt5_gpl-5.9
 
pushd $PYQTDIR
export PATH=$QTDIR/bin:$PATH
$QTDIR/bin/mayapy ./configure.py LIBDIR_QT=$LIBDIR_QT INCDIR_QT=$INCDIR_QT MOC=$QTDIR/bin/moc -w --no-designer-plugin
make -j 8
sudo make install
popd

popd

終了です! 記事末尾のテスト段落を確認してください。

Windows

D:\__sdkext\_Maya2018 Scripts\sip-4.19.3 
D:\__sdkext\_Maya2018 Scripts\PyQt5_gpl-5.9
D:\__sdkext\_Maya2018 Scripts が私のローカルフォルダです。

SIPとPyQtを構築するための手順とスクリプトは次のとおりです。

APIドキュメントの指示に従って環境を設定してください(Mayaドキュメントの開発者リソース> APIガイド>ビルド環境の設定> Windows環境(64ビット))

最初にqt.confをバックアップしてください.PyQt5をビルドした後にqt.confを復元する必要があります。 ... / bin / qt.confを以下のように置き換えます。

[Paths]
Prefix=$(MAYA_LOCATION)
Libraries=lib
Binaries=bin
Headers=include/Qt
Data=.
Plugins=qt-plugins
Translations=qt-translations
Qml2Imports=qml

/include/qt-5.6.1-include.tar.gzを/ include / Qtに解凍します。

/ mkspecs / qt-5.6.1-mkspecs.tar.gzを/ mkspecsに解凍します。

VS2012 x64ネイティブツールのコマンドプロンプトで以下のビルドスクリプトを実行してください。 フォルダにインストールされたMayaに管理者権限(プログラムファイルなど)が必要な場合は、管理者としてコマンドプロンプトを実行してください。

環境設定

@echo off

set MAYAVERSION=2018
set ADSKQTVERSION=5.6.1
set SIPVERSION=4.19.3
set PYQTVERSION=5.9
set MAYADRIVE=m:
set BUILDDRIVE=v:

if exist %MAYADRIVE%\nul subst %MAYADRIVE% /d
subst %MAYADRIVE% "C:\Program Files\Autodesk\Maya%MAYAVERSION%"
set MAYA_LOCATION=%MAYADRIVE%

set MAYAPYQTBUILD=%~dp0
rem Removing trailing \
set MAYAPYQTBUILD=%MAYAPYQTBUILD:~0,-1%

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

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

set PATH=%QTDIR%\bin;%PATH%
set MSVC_VERSION=2015
set MSVC_DIR=C:\Program Files (x86)\Microsoft Visual Studio 14.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

SIPの構築とインストール

下記のスクリプトを使用してください。また、GitHubで見つけることもできます。

@echo off
set XXX=%~dp0
if ["%MAYAPYQTBUILD%"]==[""] call "%XXX%setup.bat"

pushd %SIPDIR%
rem "%MAYA_LOCATION%\bin\mayapy" configure-ng.py --spec %_QMAKESPEC_%
"%MAYA_LOCATION%\bin\mayapy" configure.py
nmake
nmake install
popd

PyQtの構築とインストール

下記のスクリプトを使用してください。また、GitHubで見つけることもできます。

@echo off
set XXX=%~dp0
if ["%MAYAPYQTBUILD%"]==[""] call "%XXX%setup.bat"

set QMAKESPEC=%QTDIR%\mkspecs\%_QMAKESPEC_%
if not exist "%QMAKESPEC%\qmake.conf" (
    echo "You need to uncompress %MAYA_LOCATION%\mkspecs\qt-5.6.1-mkspecs.tar.gz !"
    goto end
)
if not exist "%MAYA_LOCATION%\include\Qt\QtCore\qdir.h" (
    echo "You need to uncompress %MAYA_LOCATION%\include\qt-5.6.1-include.tar.gz in %MAYA_LOCATION%\include\Qt !"
    goto end
)
findstr /L /C:"Headers=include/Qt" "%MAYA_LOCATION%\bin\qt.conf" >nul 2>&1
if ERRORLEVEL 1 (
    echo "You need to edit %MAYA_LOCATION%\bin\qt.conf to use 'Headers=include/Qt'"
    goto end
)
findstr /L /C:"-lqtmain -lshell32" "%QTDIR%\mkspecs\common\msvc-desktop.conf" >nul 2>&1
if ERRORLEVEL 1 (
    echo "You need to edit %QTDIR%\mkspecs\common\msvc-desktop.conf to use 'QMAKE_LIBS_QT_ENTRY     = -lqtmain -lshell32'"
    goto end
)
if not exist "%MAYA_LOCATION%\include\Qt\qtnfc.disabled" (
    echo "You need to rename %MAYA_LOCATION%\include\Qt\qtnfc to %MAYA_LOCATION\include\Qt\qtnfc.disabled"
    goto end
)
    
pushd %PYQTDIR%

"%MAYA_LOCATION%\bin\mayapy" configure.py --spec %QMAKESPEC% LIBDIR_QT="%QTDIR%\lib" INCDIR_QT="%QTDIR%\include\Qt" MOC="%QTDIR%\bin\moc.exe" --sip="%QTDIR%\Python\sip.exe" --sip-incdir="%QTDIR%\Python\include" -w --no-designer-plugin
nmake
nmake install
popd

:end

終了です! 記事末尾のテスト段落を確認してください。

テストを行う

この例をMaya Script Editor(Pythonタブ内)にコピーして貼り付け、コードを実行します:

import sys 
from PyQt5.QtWidgets import (QWidget, QToolTip, QPushButton)
from PyQt5.QtGui import QFont    
 
class Example(QWidget):
    def __init__(self):
        super(Example,self).__init__()
        self.initUI()

    def initUI(self):
        QToolTip.setFont(QFont('SansSerif', 10))
        self.setToolTip('This is a <b>QWidget</b> widget')
        btn = QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 50)
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Tooltips')
        self.show()
        
ex = Example()

ダイアログが表示されたら、すべて設定されています。

0 コメント

記事コメントは受け付けていません。