Maya 2023 Python2 スクリプトの Python3 変換

以前よりたまに利用させていただいていた、良くできた揺れものスクリプト「YURAYURA」ですが、またも利用させていただこうとすると、、Maya 2023では動かない!
Mayaは2022からPython3がデフォルトで起動しているのだ。
「YURAYURA」はPython2で記述されているので、MayaをPython2モードで起動しようかと思っていると、なんと、出来ない。
Mayaは2023ではPython3への切り替えができないのだ!

Autodeskの記述にこんなものを発見した。

『Maya は Python2 をサポートしなくなり、Python 2 モードで起動できなくなります。』とあったのだ。

仕方ないので、Python2 スクリプトを Python3 へ変換してみた。
※尚、環境は私の環境(私のPC)を基本に説明させていただいています。

HOW TO

まず、変換のスクリプトの場所。

C:\Program Files\Autodesk\Maya2023\bin\mayapy.exe

ライブラリィはこちら。

C:\Program Files\Autodesk\Maya2023\Python\Lib\lib2to3

存在を確認してい、分かりやすく、デスクトップに任意のフォルダ(私の場合は’myScript‘)を作成し、その中に「YURAYURA.py」を入れて変換してみる。

変換実行

スクリプトの実行はコマンドプロンプトで行います。
コマンドプロンプトを管理者権限で起動して、ディレクトリを「YURAYURA.py」のある場所に移動させてます。

C:\>cd Users\itami\Desktop\myScript
C:\Users\itami\Desktop\myScript>

以下のコマンドを入力します。

C:\Users\itami\Desktop\myScript>"C:\Program Files\Autodesk\Maya2022\bin\mayapy.exe" -m lib2to3 --nofix=long -w YURAYURA.py

何か変換している感じであれば多分動いているでしょう。
「YURAYURA.py」の実際の出力は以下の内容でした。

RefactoringTool: Skipping optional fixer: buffer
RefactoringTool: Skipping optional fixer: idioms
RefactoringTool: Skipping optional fixer: set_literal
RefactoringTool: Skipping optional fixer: ws_comma
RefactoringTool: Refactored YURAYURA.py
--- YURAYURA.py (original)
+++ YURAYURA.py (refactored)
@@ -8,7 +8,7 @@

 プラグインとして使用する場合は、mayaのscriptsフォルダに
 このファイルを入れます。
-C:\Users\[user]\Documents\maya\scripts
+C:\\Users\[user]\Documents\maya\scripts
 もしくは、PYTHON_PATHが設定してある場所でもOKです。

 実行コマンド
@@ -43,7 +43,7 @@

 class YURAYURA:
     def __init__(self):
-        print "================== YURAYURA =================="
+        print("================== YURAYURA ==================")
         self.root = self.getNode("YURAYURA") # root
         self.nc = self.getNode("YURAYURA_nucleus") # nucleus
         self.hs = self.getNode("YURAYURA_hairSystem") # hairSystem
@@ -108,10 +108,10 @@
     def generate(self):
         # 選択無しは終了
         if not len(pm.selected()):
-            print "nothing selected"
+            print("nothing selected")
             return

-        print "generate YURAYURA"
+        print("generate YURAYURA")

         # Play Every Frame, Max Real-timeにする
         pm.playbackOptions(e=1,ps=0,mps=1)
@@ -169,7 +169,7 @@

             # 選択階層と同階層のJoint階層を作成
             for ih,h in enumerate(self.getHie(sel[i],[])):
-                print h
+                print(h)
                 # bake用セットに入れる
                 self.bakeSet.add(h)
                 # オフセットトランスフォーム作成
@@ -251,7 +251,7 @@

     # 数値の変更を更新
     def modify(self):
-        print "MODIFY SETTING"
+        print("MODIFY SETTING")
         # nucleus設定
         self.setNc()
         # hairSystem設定
@@ -271,7 +271,7 @@

     # コリジョンを追加する
     def addCollide(self):
-        print "ADD COLLIDE"
+        print("ADD COLLIDE")
         # nucleus設定
         self.setNc()
         # hairSystem設定
@@ -283,7 +283,7 @@

     # bake処理 シミュレーション階層とUIを削除
     def bake(self):
-        print "BAKE"
+        print("BAKE")
         pm.bakeResults(
             self.bakeSet.members(),
             sm=1,
RefactoringTool: Files that were modified:
RefactoringTool: YURAYURA.py

C:\Users\itami\Desktop\myScript>

変換前スクリプトは、「.py.bak」としてバックアップされます。

日本語エンコードcp932の削除

Python2 スクリプトを Python3 へ変換は、2to3にお任せのノーチェックですが、cp932エンコードエラーが発生していたので、こちらはコメントをすべて手作業で削除しました。
ちなみにこちらの作業はVSCodeで行っていますのでUTF-8で保存となります。

Pymelのインストール

「YURAYURA」はPymel記述なのでPymelも必要。PymelはMayaオフィシャルライブラリィではないので、インストールが必要。
コマンドプロンプトで、C:\Program Files\Autodesk\Maya2023\bin に移動して、mayapy -m pip install “pymel>=1.3.,<1.4. を実行。
PymelのインストールはAutodeskにも記述があります

以下が実行結果です。

C:\Program Files\Autodesk\Maya2023\bin>mayapy -m pip install "pymel>=1.3.*,<1.4.*"
Collecting pymel<1.4.*,>=1.3.*
  Downloading pymel-1.3.0a2-py2.py3-none-any.whl (12.4 MB)
     |████████████████████████████████| 12.4 MB 6.8 MB/s
Requirement already satisfied: future>=0.18 in c:\program files\autodesk\maya2023\python\lib\site-packages (from pymel<1.4.*,>=1.3.*) (0.18.2)
Installing collected packages: pymel
  WARNING: The script ipymel.exe is installed in 'C:\Program Files\Autodesk\Maya2023\Python\Scripts' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pymel-1.3.0a2
WARNING: You are using pip version 21.2.4; however, version 22.3.1 is available.
You should consider upgrading via the 'C:\Program Files\Autodesk\Maya2023\bin\mayapy.exe -m pip install --upgrade pip' command.

C:\Program Files\Autodesk\Maya2023\bin>

何とか変換とPymelのインストールが終わり、起動と動作の確認ができました。
「YURAYURA」に関しての説明は割愛しますが、「YURAYURA」の作者、情報源の方々に感謝します。

参考URL

おすすめ