来るPython3.7に備えてMaya(Python2.7)でpathlibを使う


# はじめに

2020年に入り[pythonclock](https://pythonclock.org/)のタイマーが停止しましたね。

しかし、CG業界は未だPython2.7を使い続けています。
(だってMayaとか3dsMAXとかHoudiniとかがまだ移行完了してないからしょうがないじゃん...

DCCツールはまだまだ`Python2.7`なんですが、スタンドアロンのPythonツールは`Python2.7`である必要は無いので`Python3.7`を使ってます。

`Python3.7`を使ってて`pathlib`が便利だなあと思って使ってるんですが、調べたら`Python2.7`用にパッケージが用意されてたのでMayaにも入れて使ってみようと思います。


# インストール

Python2.7でpathlibを使いたい場合は`pip install pathlib`するだけでOK
Mayaで使う場合は`-t`フラグでMayaが認識する`PYTHONPATH`にインストール

私の場合は
`%USERPROFILE%\Documents\maya\scripts`に`site-packages`フォルダを作成してそこにインストールしてます。
moduleファイルで`PYTHONPATH`を認識するようにしてある。
インストールしやすいようにbatを用意してたりします。

```bat:pip.bat
echo off
set PIP_INSTALL_PACKAGE=
set /P PIP_INSTALL_PACKAGE="enter the package to install:"
py -2.7 -m pip install %PIP_INSTALL_PACKAGE% -t site-packages
pause
```

# 使ってみる

インストール完了したので使ってみようと思います。

```python
import pathlib
pathlib.Path
# Result: <class 'pathlib.Path'> #
```
問題なくインポート出来てる!!

```python
pathlib.Path(os.getenv("MAYA_LOCATION")).parent
# Result: WindowsPath('C:/Program Files/Autodesk') #

list(pathlib.Path(os.getenv("MAYA_LOCATION")).iterdir())
# Result: [WindowsPath('C:/Program Files/Autodesk/Maya2020/assets'),WindowsPath('C:/Program Files/Autodesk/Maya2020/bin'),WindowsPath('C:/Program Files/Autodesk/Maya2020/brushImages'),WindowsPath('C:/Program Files/Autodesk/Maya2020/brushShapes'),WindowsPath('C:/Program Files/Autodesk/Maya2020/cmake'),WindowsPath('C:/Program Files/Autodesk/Maya2020/devkit'),WindowsPath('C:/Program Files/Autodesk/Maya2020/docs'),WindowsPath('C:/Program Files/Autodesk/Maya2020/Examples'),WindowsPath('C:/Program Files/Autodesk/Maya2020/ExternalWebBrowser'),WindowsPath('C:/Program Files/Autodesk/Maya2020/icons'),WindowsPath('C:/Program Files/Autodesk/Maya2020/include'),WindowsPath('C:/Program Files/Autodesk/Maya2020/lib'),WindowsPath('C:/Program Files/Autodesk/Maya2020/mkspecs'),WindowsPath('C:/Program Files/Autodesk/Maya2020/modules'),WindowsPath('C:/Program Files/Autodesk/Maya2020/plug-ins'),WindowsPath('C:/Program Files/Autodesk/Maya2020/plugins'),WindowsPath('C:/Program Files/Autodesk/Maya2020/presets'),WindowsPath('C:/Program Files/Autodesk/Maya2020/Python'),WindowsPath('C:/Program Files/Autodesk/Maya2020/PYTHON_LICENSE'),WindowsPath('C:/Program Files/Autodesk/Maya2020/PYTHON_README'),WindowsPath('C:/Program Files/Autodesk/Maya2020/qml'),WindowsPath('C:/Program Files/Autodesk/Maya2020/resources'),WindowsPath('C:/Program Files/Autodesk/Maya2020/scripts'),WindowsPath('C:/Program Files/Autodesk/Maya2020/support'),WindowsPath('C:/Program Files/Autodesk/Maya2020/synColor'),WindowsPath('C:/Program Files/Autodesk/Maya2020/translations')] #
```

`parent`で親階層、`iterdir`でディレクトリの中身を見つけられる

```python
list(pathlib.Path(os.getenv("MAYA_LOCATION")).glob("Python/DLLs/*.pyd"))
# Result: [WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/bz2.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/pyexpat.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/select.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/unicodedata.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/winsound.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/_bsddb.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/_ctypes.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/_ctypes_test.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/_elementtree.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/_hashlib.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/_msi.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/_multiprocessing.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/_socket.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/_sqlite3.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/_ssl.pyd'),WindowsPath('C:/Program Files/Autodesk/Maya2020/python/dlls/_testcapi.pyd')] #
```
globも使える!



# おわりに

無事`pathlib`が使えたので社内のライブラリに追加して積極的に使ってみようと思います。
`Maya2021`が出るころには`Python3.7`になっていると良いのですが、移行したら移行したで既存のツール群のテコ入れ祭りが始まると思うので億劫ですね...

来る`Python3.7`に備えて少しでも慣れておこうと思います。