Windows10で3dsmax2018以降開発用のPySide2をビルドする その1(準備編)

2020年3月2日

3dsmax2018以降のPython開発についても記事を書きたいと思いながら一年も放置してしまった大きな理由が、このPySide2をビルドするという工程を説明するのが煩わしい、というものでした。

しかしすでに2020までリリースされてしまい、さすがに最新の3dsmaxにおけるツール開発をまったく扱わないというわけにもいかず、重い腰を上げてまずは必要なツールのビルドから始めよう、ということにしたわけです。この記事を書くために改めて環境構築からビルドするまでを全部やり直して書いたので、2019年8月20日現在、実行可能であると確認できた方法となります。

そもそもなんでPySide2が必要なのか

実は3dsmax上で動くPySide2のツールを作るのに、3dsmaxに入っているPySide2を使うという方法がもちろんあります。と言うよりむしろその方が普通でしょう。

しかし3dsmaxに同梱されているPySide2は不完全なもので、開発に使うツールの実行ファイルが含まれていないのです。具体的にはUIをグラフィカルに編集するツール(QtDesigner)と、そのQtDesignerで作成した.uiファイルをPythonの.pyファイルに変換するツール、さらにリソースコンパイラ(UIに使用する画像群をリソースファイル化するツール)の三つがありません。前者はまだPython上からめんどくさいコードを実行すれば代用できますが、後者は無いとどうにもなりません。

というわけで、PySide2本体というよりも、そこに付属しているツールが欲しいためにソースからビルドしよう、という話が浮上するのです。

と、前置きはこのぐらいにして早速始めましょう。

Gitをインストールする

既にツール開発をされている方はGitかそれに類するバージョン管理システムを導入されているかもしれませんが、PySide2のビルドにはGitが必要になるので入っていない場合は入れましょう。

今回は3dsmaxの開発用、という前提なのでWindows10の環境で説明を行います。

下記からGitのWindows用インストーラを取得しましょう。

https://git-scm.com/download/win

インストールは基本的にインストーラに従って進めますが、いくつか注意点があります。

まずはデフォルトエディタの設定。インストーラの下記の画面で、Gitのデフォルトエディタとして何を使用するか設定することができます。インストーラのデフォルトは一緒にインストールされるGit Bashというシェルに搭載されているVimですが、その他のWindows上のエディタも使用できます。私は開発にも使用しているVisual Studio Codeに設定しました。(私が使用しているVS CodeはInsiderバージョンという「不安定でもいいから常に最新版を使う」というものです。新機能をいち早く使えますが、不具合にもいち早く出会えるという物好き用バージョンです。)

次に、環境変数の調整です。

ここは注意が必要で、デフォルトは真ん中になっていますが、真ん中か下のオプションを選択しましょう。一番上のオプションは、gitコマンドをGit Bashのターミナルからしか使用しない、というもので、これを選択するといわゆるコマンドプロンプトやPowerShellからgitコマンドを使用することができなくなります。

真ん中のオプションはコマンドプロンプトやその他のコマンドラインから使用できるというもので、通常はこれが無難です。一番下のオプションはその他のいろいろなUnixツールもコマンドプロンプトから使えるようにする、というもので、このオプションを使用するとコマンドプロンプトからUnixコマンドが使えるようになります。そういうことをしたいという場合は一番下を選びましょう。ちなみに私はUnixコマンドについてはGit Bashで用が足りるのと、Windows10ではPowerShellを使っていて、PowerShellでは頻繁にWindowsでうっかり打ってしまうUnixコマンド(lsとか)はエイリアスが設定されていて機能するようになっているため、特に一番下のオプションには魅力を感じないので入れませんでした。

以降のオプションは基本デフォルトのままでOKです。(私はデフォルトのままでインストールしています。)

PySide2のソースを取得する

作業用ディレクトリを作る

まずビルド用のフォルダを作りましょう。今回はユーザのドキュメントディレクトリ内にdevというディレクトリを作ってその中で作業を行おうと思います。コマンドプロンプトを開いて以下のコマンドを実行してください。

cd %USERPROFILE%\Documents
mkdir dev
cd dev

現在のユーザのドキュメントディレクトリ内にdevというディレクトリを作り、その中に入った状態です。

ソースをダウンロード(git clone)する

続いてこのディレクトリにソースをダウンロードします。

git clone --recursive git://code.qt.io/pyside/pyside-setup.git 

–recursiveオプションによって、必要なものが再帰的にダウンロードされます。

完了したらダウンロードしてきたディレクトリ内に入りましょう。

cd pyside-setup

git cloneで持ってきたフォルダなので、このフォルダ内はgitによってバージョン管理されています。確認してみましょう。

※ここでコマンドプロンプトからgitコマンドを実行しますが、インストーラでGit Bashオンリーにするとこれは実行できません。その場合はGitのインストールをやり直すのが手っ取り早いです。

>git branch -a
* dev
  remotes/origin/5.11
  remotes/origin/5.11.0
  remotes/origin/5.11.1
  remotes/origin/5.11.2
  remotes/origin/5.11.3
  remotes/origin/5.12
  remotes/origin/5.12.0
  remotes/origin/5.12.1
  remotes/origin/5.12.2
  remotes/origin/5.12.3
  remotes/origin/5.12.4
  remotes/origin/5.13
  remotes/origin/5.13.0
  remotes/origin/5.14
  remotes/origin/5.6
  remotes/origin/5.9
  remotes/origin/HEAD -> origin/dev
  remotes/origin/dev

git branchコマンドを-aオプションで実行するとすべてのブランチをリストすることができます。先頭でアステリスク(*)のついているブランチが現在のブランチで、git cloneしてきた状態だとdevというブランチになっていることがわかります。

5.6ブランチに移動する(重要!)

ここで5.6ブランチに移動します。これがとても重要です。重要なので何度も言いますが、5.6ブランチに移動します!これを忘れてdevブランチのままで実行すると後でひどいことになります。(と経験者である私は語ります。)

git checkout 5.6

この5.6という番号は、PySide2のもとになっているQtのバージョンを示しています。PySideとはもともとC++のQtというGUIライブラリをPython用にラップしたものでPySideはQt4系、PySide2はQt5系がベースになっています。3dsmaxで使用されているPySide2はQt5.6をベースにしたものなので、使用するソースは5.6ブランチのものになります。

サブモジュールをアップデートする

>git submodule update --init --recursive
Submodule 'sources/pyside2-examples' (git://code.qt.io/pyside/examples.git) registered for path 'sources/pyside2-examples'
Submodule 'wiki' (https://github.com/PySide/pyside2.wiki.git) registered for path 'wiki'
Cloning into 'E:/Users/tagumak/Documents/dev/pyside-setup/sources/pyside2-examples'...
Cloning into 'E:/Users/tagumak/Documents/dev/pyside-setup/wiki'...
Submodule path 'sources/pyside2-examples': checked out '8df6dccecc5165f7c3ec5896c9be8baceda7161f'
Submodule path 'sources/pyside2-tools': checked out '7fe32567c75b6b9985b9efbecf74477c9e829fb2'
Submodule path 'wiki': checked out 'ac1b69fabc1a9f81da585fe1a1aa4188862ced66'

コマンドを入力するとややこしいログが何行か表示されます。そしてここに出てくる「pyside2-tools」というやつが、まさに今求めているもの、今回この面倒な作業をしてまで手に入れたいものが格納されている場所です。つまり僕らが欲しいものはサブモジュールなのですね。

他に必要なツールをインストールする

CMakeのインストール

https://cmake.org/download/
Cmake ダウンロードページ

上記URLにアクセスしてページ中ほど、 Binary distributions: のところからWindows用の64ビット版.msiインストーラをダウンロードしてインストールしましょう。

インストール中の注意点は、パスを通すところです。

デフォルトは一番上の、PATHに追加しない、というものです。これを選択するとコマンドプロンプトから実行するときに面倒なので、真ん中か下を選択してください。真ん中はPCを使うすべてのユーザでパスを通す(システム環境変数に登録する)、下は現在のユーザのみ(ユーザ環境変数に登録する)という意味です。

Visual C++ 2015 Community のインストール

Visual Studioはどんどん新しいものが出ていますが、今回使用するものは一緒に使用するQt5.6.2のビルドバージョンと合わせる必要があります。共通でありさえすればどのバージョンでも構わないのですが、Qt5.6.2は限られたバージョンの対応分しか用意されていないため、2015を使用することにしました。

https://my.visualstudio.com/Downloads?q=visual%20studio%202015&wt.mc_id=o~msft~vscom~older-downloads

この中からCommunity 2015 with Update3というやつを入れましょう。

おそらくUpdate3でないバージョンでも問題ありませんが、私のところにインストールしたものはUpdate3なのでこちらを紹介しておきます。

Pythonのインストール

3dsmaxでPythonの開発をしようというぐらいだからPython環境はもう用意されているという人も多いと思いますが、一応Pythonのセットアップも書いておきます。

https://www.python.org/downloads/windows

上記から64ビット版のmsiインストーラをダウンロードしてインストールします。現在、Pythonの種類は3.〇という3系ですが、3dsmaxに搭載されているPythonは2020でもまだ2.7系です。そのためPySide2もPython2.7でビルドする必要があります。

しかし、Python2.7はついにサポートの終了が発表されたので、近い将来、3dsmaxのPythonも3系にアップグレードされることでしょう。

横道にそれましたがPython2.7.〇をインストールします。ここでは執筆時の最新版(2.7.16)をインストールしています。

Pythonのインストール時に注意するのはインストールのカスタマイズのところです。ここでPATHに登録するオプションがデフォルトでは無効になっているので、任意でこれを有効にしましょう。

上記の赤い×のところをクリックし、Will be installed on local hard driveに変更すると、インストールするパスが環境変数に登録され、コマンドプロンプトからpython と入力してPythonを実行できるようになります。

※複数のバージョンのPythonを共存させる場合等に、pythonというコマンドで起動させたいものにパスを通す必要があります。そのためこのオプションは各自必要かどうかを考えて設定してください。他のバージョンのPythonを使う予定がないのであれば有効にしておくと便利です。

インストールが完了したら確認します。

Windowsキー+Rでcmdと入力してコマンドプロンプトを開いて以下を実行します。

>python -V
Python 2.7.16

※パスを通していない場合エラーになったり、別のバージョンが起動したりするかもしれません。その場合はフルパスでインストールしたpython.exeを実行します。

virtualenvのインストール

Pythonで何かプロジェクトを作成または操作する場合、そのプロジェクト用の環境を用意したいということがよくあります。そうした用途に便利な仮想環境が用意されているのでそれをインストールします。virtualenv(Virtual Environmentの略と思われる。まさに仮想環境)と呼ばれるツールになります。

>python -m pip install virtualenv
Collecting virtualenv
  Downloading https://files.pythonhosted.org/packages/5e/6a/fa7e7f533595402040c831500bb10576e1f4b8f54d476f3994c7c55d8f5e/virtualenv-16.7.3-py2.py3-none-any.whl (3.3MB)
    100% |################################| 3.3MB 2.5MB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.7.3
You are using pip version 18.1, however version 19.2.2 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

pythonの-mオプションでpipを起動し、virtualenvをインストールします。

インストール完了後のログは「もっと新しいpipがあるぞ」というメッセージなのでついでにpipもアップグレードしておきましょう。

>python -m pip install --upgrade pip
Collecting pip
  Using cached https://files.pythonhosted.org/packages/8d/07/f7d7ced2f97ca3098c16565efbe6b15fafcba53e8d9bdb431e09140514b0/pip-19.2.2-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 18.1
    Uninstalling pip-18.1:
      Successfully uninstalled pip-18.1
Successfully installed pip-19.2.2

pipを使用してpipをアップグレードできるのです。なにやらゲーデル的ループを感じますが問題なくアップグレードできました。

仮想環境のセットアップ

%USERPROFILE%\Documecnts\devに戻り、そこに仮想環境を作成しましょう。

>cd %USERPROFILE%\Documents\dev

>python -m virtualenv venv
New python executable in E:\Users\username\Documents\dev\venv\Scripts\python.exe
Installing setuptools, pip, wheel...
done.

virtualenvコマンドの後に仮想環境の名前(任意)を入力すると、その名前のフォルダができ、その中にPythonの実行環境がそっくりコピーされます。このコピーしたものに対して各種モジュールのインストール等の変更を加えても、PC本体のPython環境を汚さない、というメリットがあります。

仮想環境をアクティベート

>call venv\Scripts\activate.bat

(venv) E:\Users\username\Documents\dev>

作成した仮想環境フォルダ内のScriptsフォルダにあるactivate.batを実行することで、Pythonの仮想環境が起動します。起動するとプロンプトの左端に(仮想環境名)という文字が表示されます。これが表示されている間、仮想Python環境内にいると判断できます。

Sphinxのインストール(仮想環境内)

>pip install sphinx

このコマンドはプロンプトの左端に(venv)が表示されている状態で実行します。表示されていない場合は仮想環境がアクティベートされていないのでアクティベートしてから行ってください。仮想環境が起動している状態で実行すると仮想環境のPython上にSphinxがインストールされ、起動していない状態で実行すると本体のPython(Windows上にインストールしたもの)に対してSphinxのインストールが行われます。

Qtのインストール

http://download.qt.io/archive/qt/5.6/5.6.2/

3dsmax2018のPySide2と同じバージョンをビルドするため、Qtは5.6.2を使用します。(だいぶ古いバージョンです)

上記URLからqt-opensource-windows-x86-msvc2015_64-5.6.2.exeをダウンロードしてインストールします。

Qtのインストールはバージョンごとに行われるため、既に別のバージョンが入っていても問題ありません。新たに5.6.2を、既存の環境に影響を与えずに入れることが可能です。

※インストール中にQtアカウントを要求されます。アカウントは無料で作ることができるので登録してください。すでにQtを使用している人は持っているアカウントを使用すればOKです。

OpenSSLのインストール

http://gnuwin32.sourceforge.net/packages/openssl.htm

ここからSetupパッケージバイナリをダウンロードしてインストールします。インストールしたらパスを通しておきます。(デフォルトでインストールした場合はC:\Program Files (x86)\GnuWin32\bin)

その他いろいろのインストール

http://xmlsoft.org/sources/win32/64bit/

ここからいろいろと必要なものをインストールします。

必要なのは

  • iconv 1.14
  • libxml 2.9.2
  • libxslt 1.1.28

です。いずれも64ビット版をダウンロードします。ダウンロードしたものは7z圧縮ファイルなので、任意のディレクトリに置いて展開します。例のdevディレクトリ内で構いません。その際それぞれフォルダを生成して展開するようにしてください。

展開したらそれぞれのフォルダ内のbinにパスを通します。

それぞれのbinフォルダにパスを通す

Clangのインストール

clangはいろいろ見つかりますが、Qtのページからリンクされているものを使用します。

http://download.qt.io/development_releases/prebuilt/libclang/

ここからlibclang-release_60-windows-vs2015_64-clazy.7zをダウンロードして展開します。これはフォルダに入った状態で展開されるので出てきたフォルダを任意の場所に置き、libclang\binにパスを通しましょう。

さあ、ようやく準備が完了しました。長すぎる!

というわけで実際のビルドは記事を改めましょう。