Windows10で3dsmax2018以降開発用のPySide2をビルドする その2(実行編)
その1でビルドの準備が整ったので、いざビルドを実行してみましょう。
VC++2015 64ビット版のコマンドプロンプトを起動する
VC++2015用のに付属のコマンドプロンプトを管理者として実行します。Windowsのスタートメニューから探し、右クリック→その他→管理者として実行 で起動します。
必ず64ビット版のものを起動する点に注意してください。
起動したらディレクトリを移動しておきましょう。
cd %USERPROFILE%\Documents\dev
一時環境変数の追加
set LLVM_INSTALL_DIR=%USERPROFILE%\Documents\dev\libclang
set PATH=%USERPROFILE%\Documents\dev\libclang\bin;%PATH%
virtualenvの起動
call venv\Scripts\activate.bat
起動したらプロンプトの変化を確認してください。先頭に(venv)がついていればvenv環境下にあります。※venvは仮想環境を作成するときにつけた名前です。適宜読み替えてください。
ソースのディレクトリに移動
cd pyside-setup
セットアップスクリプトを実行
ここでいよいよビルドを実行しますが、その前にいくつか必要なパスがあるので、まとめてテキストファイルにでもメモしておくことをお勧めします。かなり長いオプションを入力することになるので、コマンド全文をメモ帳等で入力しておいてコピー&ペーストすると良いでしょう。
必要なのは
- qmakeのパス
- cmakeのパス
- opensslのパス
です。qmakeはQt5.6.2をインストールしたフォルダ内にあります。私のところでは{インストールしたフォルダ}\5.6\msvc2015_64\binにありました。qmake.exeまでのフルパスをメモします。
cmakeも同様にcmake.exeまでのフルパスをメモします。私のところでは C:\Program Files\CMake\bin\cmake.exe でした。
opensslについてはopenssl.exeのあるフォルダまでのパスをメモします。私のところではC:\Program Files (x86)\GnuWin32\binでした。
これらをつないでコマンドを作成します。かなり長いので間違えないように注意してください。(それぞれのパスは適宜読み替えてください。)
python setup.py bdist_wheel --version="5.6" --qmake="C:\Qt\Qt5.6.2\5.6\msvc2015_64\bin\qmake.exe" --cmake="C:\Program Files\CMake\bin\cmake.exe" --openssl="C:\Program Files (x86)\GnuWin32\bin"
改めると、pythonコマンドにsetup.pyというファイルを渡し、bdist_wheelという引数を渡します。その上でオプションとして、Qtのバージョン、qmakeのパス、cmakeのパス、opensslのパスを渡しますが、qmakeとcmakeはファイル名までのフルパス、opensslだけなぜかフォルダまでのパスなので注意してください。
実行すると大量のログが流れるので止まるまで放置しておきましょう。かなーり、時間がかかるはずです。
PySide2の本体を付属ツールも含めてすべてビルドするため、けっこうな時間がかかります。進行状況がパーセンテージで表示されますが、個々のプロジェクトに対する進捗なので100%になった後別のものがまた0%からスタートしたりするので残り時間はあまり読めません。
全て終了するとプロンプトが表示され、入力待機状態になります。
ちなみにこんな風にあっさりと説明をしていますが、私はこの部分でのエラーをおそらく30回ぐらい体験してその都度いろいろ変更したり修正したりし、なんなら仮想環境の再構築からやり直したりときにはソースコードまで直したりあれこれやり、やっとビルドが通って安堵した…という日から2年近く経過して、今回、当時のPCとは別のPCに環境構築からやり直しました。使用したVC++のバージョンも異なる状況で、現在入手可能なものでもビルドできることが確認できました。
PySide2をインストールする
ビルドが成功すると、pyside-setupフォルダ内にdistというフォルダができ、その中にPythonのWheelが生成されます。今回の手順に沿って行うとPySide2-5.6.0a1-5.6.2-cp27-cp27m-win_amd64.whlというファイル名で生成されるはずです。
この完成したwheelを使用してPython環境にPySide2をインストールしてみましょう。
ビルドに使用したコマンドプロンプトは閉じて、新たにコマンドプロンプトを開きます。今度はVC2015のものではなく、普通のcmd.exeで構いません。
起動したら以下のコマンドを入力します。
※ここではvirtualenvではなくPython本体にPySide2をインストールします。virtualenvにインストールしたい場合は仮想環境を作成、アクティベートした状態で以下を実行してください。
>python -m pip install %USERPROFILE%\Documents\dev\pyside-setup\dist\PySide2-5.6.0a1-5.6.2-cp27-cp27m-win_amd64.whl
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Processing e:\users\username\documents\dev\pyside-setup\dist\pyside2-5.6.0a1-5.6.2-cp27-cp27m-win_amd64.whl
Installing collected packages: PySide2
Successfully installed PySide2-5.6.0a1
最終的にSuccessfullyと出れば成功です。テストしてみましょう。まずPythonを起動します。
> python
Python 2.7.16 (v2.7.16:413a49145e, Mar 4 2019, 01:37:19) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Pythonを起動するとプロンプトが>>>になります。ここに以下のコードを入力します。
>>> from PySide2 import QtWidgets
>>>
上の1行目を入力してEnterキーを押し、エラーが出ずに次の行のプロンプトが表示されればOKです。正しくPySide2がインストールされました。
各種PySide2ツールの場所
最後に、これからMaxやMaya等のPySide2を使用した開発に使う各種ツールの場所を確認しておきましょう。
QtDesigner
{pythonのインストールパス}\Lib\site-packages\PySide2\designer.exe
UIコンバータ
{pythonのインストールパス}\Scripts\pyside2-uic.exe
リソースコンパイラ
{pythonのインストールパス}\Lib\site-packages\PySide2\pyside2-rcc.exe
以上でほしかったものはすべてそろいました。PySide2を活用したツール開発を始めましょう。
ビルドしたWheelのダウンロード
“PySide2-5.11.2-5.11.2-cp27-cp27m-win_amd64” をダウンロード
PySide2-5.11.2-5.11.2-cp27-cp27m-win_amd64.zip – 371 回のダウンロード – 74.48 MBZIP圧縮してあるので、ダウンロードして任意の場所に展開し、以下のコマンドでインストールしてください。
python -m pip install PySide2-5.11.2-5.11.2-cp27-cp27m-win_amd64.whl
python はPySide2をインストールしたいバージョンのものを使用してください。
ディスカッション
コメント一覧
はじめまして。ツール開発の勉強でいつもブログを拝見させて頂いておりまして、大変お世話になっております。
最近python2.7&QtDesigner5.11.2で3dsMax2019のツール開発を勉強し始めていまして、一つどうしても解決できない問題があり苦闘しております。
QtDsignerでボタンなどにアイコン画像を設定してuiファイルを作った後、pyスクリプトに「MaxPlus.LoadUiType」でuiファイルをロードしてMaxで実行すると、特にエラーが出るという事は無いですが設定したアイコン画像がどうしても表示されず、空白のボタンの状態になってしまいます(アイコンが表示されない、とういう点以外は問題なく動作しております)。
ネットでずっと調べていましたが、解決する事が出来ませんでした…。
そんな中当記事を拝見した所、MaxのPySide2は不完全なものでそもそもリソースコンパイラが無いとのことでしたが、当記事にあるように諸々インストールして環境整備してビルドする事で、上記の問題も解決できますでしょうか…?
また、開発者のPCに諸々インストールすることで解決したとして、ツールを他作業者へ共有した時にも問題無く使用できるのでしょうか(アイコンが表示されるのか)?
いきなりの質問で大変恐縮ではありますが、お時間の許す時がありましたらご教示頂けると幸いです。
よろしくお願い致します。
コメントありがとうございます!このブログ初めてのコメントです。嬉しいです。
あまりにコメント付かないのでチェックがおろそかになっていて返信が遅くなってしまいました。申し訳ありません。
さて、アイコン画像を使用する件ですが、Qtではアイコンを始め画像データはリソースとして管理されます。PySide2ではこれをPythonファイル化して持たせるため、なんと画像のバイナリは必要ない、という仕組みになっております。
具体的な方法は込み入った話になるため改めてブログエントリとして書きますね。
なお、この「リソースをPython化する」という部分でリソースコンパイラというツールが必要になりますが、これがMaxには搭載されていないため、PySide2本体が必要になります。PySide2がpipでインストールできるようになれば話は早いのですが、今のところ自前でビルドするしかない、というのが現状であります。
==追記==
書きました。
3dsmax+Pyside2でUIにアイコン等の画像を使用する
不明点などあればお気軽にご質問ください。
お返事ありがとうございます!
いえいえ返信頂けてとても嬉しいです。QtDesignerからMaxにアイコンを表示させる方法がどうしても分からず放心状態でしたが、お返事頂いた内容と新しく書いて頂いた記事を見て希望が持てました!
早速試してみようと思います!ありがとうございます!
今後もrainさんのブログを見て勉強させて頂きます。また分からない事があればコメントさせて頂くかもしれないので、その際はよろしくお願いします