![]() |
Maya2022はデフォルトでPython3 AutodeskのドキュメントからもMaya2022 では規定でPython3であることが明記されています。 ■ドキュメント MayaのPython Maya2022.2 のスクリプトエディタを使ってインストールされているPythonのバージョンを調べるには、
と表示され、V3.7.7であることがわかります。 ドキュメントにはPython2モードに切り替えて使用することも可能 と書いてはありますが、 Python2とPython3の違いについては、既にネット上に詳しく掲載されているページが見つかると思います。 このページでは、これまでの実際にMayaで動いていたPython2のスクリプトを、 では、はじまりはじまり~。 ■ドキュメント Python チュートリアル(日本語 V3.7.10) |
2to3ライブラリー この記事を書いている時点では、Maya V2022.2を使用しています。 ■ドキュメント Python 3に移行する(Maya 2022.2 の新機能) ですが、もう少し詳しい情報が知りたい、というところからスタート します。 今度はPythonのドキュメントの方を探りますと、2to3という変換プログラムがあることがわかります。 ■ドキュメント 2to3 - Python 2 から 3 への自動コード変換(V3.7.10) Python2 のソースコードを読み込んで、Python3 のコードに変換してくれるらしいことがわかります。 ここまで来ても、まだ情報が足りませんね。 この時点で、大変役に立った英語のページがありました。 この記事の内容から、Python3に変換する種類と、その起動方法が書かれています。 Python3に変換する種類ですが、ここでは3種類を解説し、でも実はどれも2to3変換プログラム を使っていることがわかります。 その種類とは、2to3、futurize、modernizeです。 ここのページはこの最初の2to3を取り上げます。 さて、先を急ぐ前に、 まずは2to3はライブラリーですが、以下のディレクトリーにあります。 ![]() 例えば、大きな変更点の1つに辞書型のdictionaryがありますが、結構使われている構文なのでこれを手動て変換するとなった場合は厄介です。
というパターンで、キー/アイテム/バリューをリスト型にキャスト してくれて、従来的な使用方法を実現してくれています。 気になる構文名が この 52個のファイルの中にありましたら、中を覗いてみると、どう変換されるのか見ることが出来ます。 |
Python3への変換作業 実はPython3に変わることで一番多く引っかかるのはprint文がprint()関数に変わったことです。
printはかっこ()でくくらないといけない、というのは分かっているとして、 まずは、Python2 形式で以下のように書き、example.pyという名前で任意のディレクトリー(例;D:\script)に保存します。
では、先に紹介したWebページに書いてある通り、 [Windowsボタン]+Rを押して「ファイル名を指定して実行」画面を表示し、cmdと記述して [OK] 押してコマンドプロンプトを表示します。 ![]() カレントパスを先にファイルを入れたディレクトリーにします。 ![]() そうしたら、以下のように記述して、実行キーを押します。
すると、数行の実行結果と共に Files that were modified: example.py という表示で終わっていたら完了です。 ![]() 上図表示行の先頭に 変換後に保存したディレクトリーを見ると、2つのファイルが出来上がります。 lib2to3の後にはオプションを設定することが出来、上記例では--nofix=longと-wを使いました。
ちなみに、--helpまたは-hをつけて実行するとオプションの種類と説明を表示してくれます。 ![]() 変換後の内容をMaya2022.2のスクリプトエディタで実行すると、以下のように動きました。 ![]() この2to3の動かす .py ファイルは、内部の構文だけを見るので、長い行のスクリプトでどこかでうまく行かなかった場合にその前半なのか後半なのかなど、限られた行数で実行してみて不具合箇所を見つけ出すようにも使用出来ます。 Pythonにはもう1つチェック機能を備えたPylintというものがあり、次はこちらを紹介します。 |
Pylint によるコードチェック pylintもMayaをインストールしたライブラリーに存在します。 C:\Program Files\Autodesk\Maya2022\Python37\Lib\site-packages\pylint 内です。 ■Pylint https://pylint.pycqa.org/ pylintは、Pythonプログラミング言語のソースコード、バグ、および品質チェッカーであると通常紹介されているのですが、今回のようにPython3に移行する場合にも そのチェック機能が使えます。 Python3に変換する前の example.py を以下のようにpylintに実行させます。
すると、簡単なE:というエラーとその行数が表示されます。最初に引っかかった行数を表示して止まってしまっています。 ![]() つまり、2行目の print 文を かっこでくくって修正してから、
↓
pylintを実行すると、今度は3行目でE:表示します。 ![]() 先に示した通り、print文 は2to3が関数に修正してくれるので、2to3を通した example.pyをpylintにかけると、今度はたくさんの表示と共に、最後の行で Your code has been rated at -2.00/10 のような表記になります。 ![]() 2to3とpylintをうまく組み合わせてPython3への変換作業を進めていけると思います。 |
2to3 実践;CustomOutliner では、既に配布している CustomOutliner で実際にPython3に変換作業をしてみましょう。 ■SUITE UsersNotes Maya 2016~ Python;カスタムアウトライナ 順序立てて手順を書いていきます。 1)スクリプトの用意とMaya2020.3で動作確認 D:\scriptにCustomOutliner.pyを置きます。 ![]() 2)2to3を使ってPython3に変換 コマンドプロンプトでD:\scriptをカレントディレクトリにして、以下のように実行しています。
すると、一カ所のprint文を修正しただけで最後まで通りました。これは非常に簡単な例でした。 ![]() 3)pylint を使ってPython3に変換ファイルを検証 コマンドプロンプトで以下のように実行して出来上がった.pyファイルが本当に動きそうなのかチェックをしてみましょう。 --helpで見ると、Python3の出力モードがあり、Python3対応のみを出力する、と書かれています。 ![]()
![]() 最後まで表示されていますので、これで Maya2022.2で動くはずです。 4)Maya2022.2 で動作確認 D:\script を見ると、CustomOutliner.py と CustomOutliner.py.bak というバックアップファイルが出来ています。 ![]() はい、起動に成功しました。 次は、2to3を使って対応出来ている いくつかの例を紹介します。 |
2to3;うまく行く事例 事例話の最初は、2to3 を実行すれば自動でPython3対応の記述に直してくれるものをいくつか取り上げます。
こんな感じで、直してくれるものがたくさんあって助かります。(特に初歩のptint文や辞書(dict)だけでも相当助かります。)まだたくさん うまく行く例があると思います。 次は、2to3を使っても対応出来なかったいくつかの例を紹介します。 |
2to3;うまく行かない事例 pythonの文字列はやっかい事になりました。 以下に、簡単な違いを書きましたが、より詳しくは調べてください。 python2 python3 これによる違いを、たまたま自分のミスから発覚したものも含めて紹介します。
最後は、今まで公開して来たツールを Python3版に対応したものを再公開致します。 |
次回もMayaかも?・・・ |