この記事はMaya-Pythonアドベントカレンダー2016の12月18日の記事です。
はじめに
Maya2017はPySideがPySide2になったのは皆さんご存知の通り。
この変更によっていくつか困った事案が発生しています。
- うちはスタンドアロンアプリ、Maya、MotionBuilder、Photoshop、等々すべてGUIはPySideで構築しているのですが、MayaだけPySide2になられるといろいろ共有できなくなってしまう
- uiファイル等は必ずPythonコードに変換して使うことにしてるので、Mayaにはpyside-rcc.exeが入ってないので困った
解決方法を模索するためにもPySide2を検証せねばと考えているんですが、Mayaで採用されているのはまさかのPySide2のアルファ版。
PyPIにはまだ登録されてないです。
頼りのUnofficial Windows Binaries for Python Extension Packagesにも無いです。
心の底からめんどくさいンだけど、ビルドに挑戦してみようと思います。
たぶん失敗するのですが、少しでも誰かの助けになれば本望です。
環境
鬼門だらけのような気もしますが、検証したのは以下の環境です。
推奨はVisual Studio 2008ですが、嫌なので使いません。
- Windows10
- Python 2.7.12
- Visual Studio 2015 Community
準備
とりあえず必要なソフトウェアのインストール。PCがわりと新し目なのでいろいろ入ってない。
-
gitリポジトリをクローン。とりあえず
C:\pyside\pyside-setup
としました - Qtは5.6とのことなので、Qt 5.6.2 for Windows 64-bit (VS 2015)をQtからダウンロード。
- CMakeでビルドするようなのでCMake3.7.1をダウンロード。
ビルドに挑戦
virtualenv作成
virtualenv推奨とのことなので、作成して有効化。
pushd C:\pyside
python -m virtualenv venv27
venv27\Scripts\activate.bat
git submodule --init
pyside-setup.gitからsubmoduleでpyside2やshiboken2やらのリポジトリにつながってるので、git submodule --initします。めんどくさいからTortoiseGitでやってるのでコマンドは割愛。
全submoduleでエラーが出ましたが、もう1回挑戦したらエラーも出ず、成功しました。
ビルド
おまじない
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
パスを指定してビルド
python setup.py install --build-tests --qmake="C:\Qt\5.6\msvc2015_64\bin\qmake.exe" --cmake="C:\Program Files\CMake\bin\cmake.exe"
エラー
[ 10%] Building CXX object ApiExtractor/tests/CMakeFiles/testdtorinformation.dir/testdtorinformation_automoc.cpp.obj
testdtorinformation_automoc.cpp
[ 10%] Linking CXX executable testdtorinformation.exe
Qt5Core.lib(Qt5Core.dll) : fatal error LNK1112: モジュールのコンピューターの種類 'x64' は対象コンピューターの種類 'X86' と競合しています。
LINK failed. with 1112
NMAKE : fatal error U1077: '"C:\Program Files\CMake\bin\cmake.exe"' : リターン コード '0xffffffff'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\nmake.exe"' : リターン コード '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\nmake.exe"' : リターン コード '0x2'
Stop.
error: Error compiling shiboken2
早いよ。64bitでビルドしてないのか。
testプログラムのリンクでエラーを出してるようなので、テストは作成しないことにしよう。
python setup.py install --qmake="C:\Qt\5.6\msvc2015_64\bin\qmake.exe" --cmake="C:\Program Files\CMake\bin\cmake.exe"
だいぶ進んだ(といってもsiboken2だけど)が、やはりエラー
[ 80%] Building CXX object libshiboken/CMakeFiles/libshiboken.dir/shibokenbuffer.cpp.obj
shibokenbuffer.cpp
[ 81%] Linking CXX shared library shiboken2.dll
python27.lib(python27.dll) : fatal error LNK1112: モジュールのコンピューターの種類 'x64' は対象コンピューターの種類 'X86' と競合しています。
LINK failed. with 1112
NMAKE : fatal error U1077: '"C:\Program Files\CMake\bin\cmake.exe"' : リターン コード '0xffffffff'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\nmake.exe"' : リターン コード '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\nmake.exe"' : リターン コード '0x2'
Stop.
error: Error compiling shiboken2
真剣に調べよう。X64ってどこで指定するんだろ?
やっぱりMakefileを読んでも分らんなぁ。
CMakeではVisual Studio 2015付属のコマンドプロンプトにするという記事がいくつか見つかる。
「おまじない」が甘かった。
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
wheel作成を指定するオプションもあったのと、ほっとくとgitコマンドを実行してしまうようなので無効化するようにコマンドオプションを変えてビルド実行。
python setup.py bdist_wheel --ignore-git --qmake="C:\Qt\5.6\msvc2015_64\bin\qmake.exe" --cmake="C:\Program Files\CMake\bin\cmake.exe"
setup.pyにはOpenSSLを指定するオプションもあったのでよくよくログを見るとOpenSSLが無効になっている。あちゃー、まいっか
Qt docs: C:/Qt/Docs/Qt-5.6
Qt plugins: C:/Qt/5.6/msvc2015_64/plugins
---
OpenSSL libs: None
==============================
Building module shiboken2...
それから30分後・・・
ビルド通ってしまった。不思議なこともあるもんだ・・・
running install_egg_info
Copying pyside_package\PySide2.egg-info to build\bdist.win-amd64\wheel\.\PySide2-2.0.0.dev0-py2.7.egg-info
running install_scripts
*** Install completed
C:\pyside\venv27\lib\site-packages\wheel\pep425tags.py:77: RuntimeWarning: Config variable 'Py_DEBUG' is unset, Python ABI tag may be incorrect
warn=(impl == 'cp')):
C:\pyside\venv27\lib\site-packages\wheel\pep425tags.py:81: RuntimeWarning: Config variable 'WITH_PYMALLOC' is unset, Python ABI tag may be incorrect
warn=(impl == 'cp')):
C:\pyside\venv27\lib\site-packages\wheel\pep425tags.py:87: RuntimeWarning: Config variable 'Py_UNICODE_SIZE' is unset, Python ABI tag may be incorrect
sys.version_info < (3, 3))) \
creating build\bdist.win-amd64\wheel\PySide2-2.0.0.dev0.dist-info\WHEEL
(venv27) C:\pyside\pyside-setup>
インストール
wheel出力先はdist\PySide2-2.0.0.dev0-cp27-cp27m-win_amd64.whl
です。
今の環境にpip installしてしまうと問題が起こったときに原因がわかりにくいので、新たにvirtualenvを作ってインストールしてみます。
(venv27) C:\pyside\pyside-setup>deactivate
C:\pyside\pyside-setup>cd ..
C:\pyside>
C:\pyside>python -m virtualenv venv_pyside
C:\pyside>venv_pyside\Scripts\activate.bat
(venv_pyside) C:\pyside>python -m pip install pyside-setup\dist\PySide2-2.0.0.dev0-cp27-cp27m-win_amd64.whl
Processing c:\pyside\pyside-setup\dist\pyside2-2.0.0.dev0-cp27-cp27m-win_amd64.whl
Installing collected packages: PySide2
Successfully installed PySide2-2.0.0.dev0
(venv_pyside) C:\pyside>python -m pip freeze
PySide2==2.0.0.dev0
ではサンプルが動くか確認しましょう。
(venv_pyside) C:\pyside>python pyside-setup\sources\pyside2-examples\examples\dialogs\standarddialogs.py
動きました。
目的のリソースコンパイラ!
とりあえず動くような雰囲気だけ確認して、動作確認はまた今度。ふー。
(venv_pyside) C:\pyside>C:\pyside\venv_pyside\Lib\site-packages\PySide2\pyside2-rcc.exe
PySide2 resource compiler
Usage: C:\pyside\venv_pyside\Lib\site-packages\PySide2\pyside2-rcc.exe [options] <inputs>
Options:
-o file Write output to file rather than stdout
-py2 Generate code for any Python v2.x version
-py3 Generate code for any Python v3.x version (default)
-name name Create an external initialization function with name
-threshold level Threshold to consider compressing files
-compress level Compress input files by level
-root path Prefix resource access path with root path
-no-compress Disable all compression
-version Display version
-help Display this information
まとめ
意外なことにビルドはすんなり通ったし、とても短時間で終わった。
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
python setup.py bdist_wheel --ignore-git --qmake="C:\Qt\5.6\msvc2015_64\bin\qmake.exe" --cmake="C:\Program Files\CMake\bin\cmake.exe"
python -m pip install dist\PySide2-2.0.0.dev0-cp27-cp27m-win_amd64.whl
ソースのリビジョン書き忘れてた。
> git rev-parse HEAD
6026e8b4f22d630e4e61424e153a605c060c22bb
> git submodule status
+eef6e46bf205e76616ae3fbfca92c917df22b6c4 sources/pyside2 (1.2.2-399-geef6e46)
+4ca11515b6c5376269cb91a4975e8c5b71a2cdb4 sources/pyside2-examples (heads/dev)
7fe32567c75b6b9985b9efbecf74477c9e829fb2 sources/pyside2-tools (heads/dev)
+8611bda3b346762e0589402f130b73f20dd75914 sources/shiboken2 (1.2.2-168-g8611bda)
+ed7b7ceddc2c0ec6115d58a0611441d972ea1f97 wiki (heads/master)
OpenSSLも無効だし全然動作確認してませんが、とりあえず共有しておきます。ダウンロードはこちら
参考