MayaPY not working
When running the following code in a mayapy session
import maya.standalone maya.standalone.initialize(name='python')
The interpreter never returns for the next line of code.
was an issue with my userSetup.py where I use
cmds.commandPort I guess before maya is ready. I’m guessing this is actually a bug where standalone python reads this before it is ready.
The moral of the story, check the userSetup.py file first when dealing with maya :-)
The following code is working on my mac and when I was testing a script under linux I discovered that it just stopped and never did anything else. Initially I put some print statements in the script but discovered that they were never getting to this point and this lead me to the small snippet of code above.
First test was to use a different user account. In the lab we have a local account we can use for testing with little to no environment setup so I used the following script to test if mayapy was working on the machine using this account.
/opt/autodesk/maya/bin/mayapy -c "import maya.standalone;maya.standalone.initialize(name='python');maya.cmds.file( f=True, new=True );maya.standalone.uninitialize()"
This worked which means the issue is with my lab setup / user account somewhere, there are several approaches to this, either clean all my environment and start again or add my environment to the vince account.
We can generate a clean account for testing by using the following
env -i bash
Once this was done everything was working fine, so the issue was something with my environment, not to find out what setting was doing it.
LC_PAPER=en_GB.UTF8 MANPATH=/opt/rh/llvm-toolset-7/root/usr/share/man:/opt/rh/devtoolset-9/root/usr/share/man: LC_ADDRESS=en_GB.UTF8 RMANTREE=/opt/pixar/RenderManProServer-24.1 XDG_SESSION_ID=5537 LC_MONETARY=en_GB.UTF8 HOSTNAME=w11901 VRAY_TOOLS_MAYA2019=/usr/ChaosGroup/V-Ray/Maya2019-x64/bin CMAKE_MODULE_PATH=/opt/qt/5.15.2/gcc_64/lib/cmake TERM=screen-256color SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=10.200.10.106 55523 22 LC_NUMERIC=en_GB.UTF8 X_SCLS=llvm-toolset-7 devtoolset-9 CMAKE_TOOLCHAIN_FILE=/public/devel/2021/vcpkg/scripts/buildsystems/vcpkg.cmake SSH_TTY=/dev/pts/0 QT_GRAPHICSSYSTEM_CHECKED=1 PCP_DIR=/opt/rh/devtoolset-9/root USER=jmacey LC_TELEPHONE=en_GB.UTF8 LD_LIBRARY_PATH=/opt/rh/llvm-toolset-7/root/usr/lib64:/opt/rh/devtoolset-9/root/usr/lib64:/opt/rh/devtoolset-9/root/usr/lib:/opt/rh/devtoolset-9/root/usr/lib64/dyninst:/opt/rh/devtoolset-9/root/usr/lib/dyninst:/opt/rh/devtoolset-9/root/usr/lib64:/opt/rh/devtoolset-9/root/usr/lib MAIL=/var/spool/mail/jmacey PATH=/home/jmacey/.pyenv/shims:/opt/rh/llvm-toolset-7/root/usr/bin:/opt/rh/llvm-toolset-7/root/usr/sbin:/opt/rh/devtoolset-9/root/usr/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/public/bin/2021:/opt/qt/5.15.2/gcc_64/bin:/opt/qt/Tools/QtCreator/bin:/opt/pixar/RenderManProServer-24.1/bin:/opt/pixar/Tractor-2.4/bin:/home/jmacey/scripts:/home/jmacey/.pyenv/bin LC_MESSAGES=en_GB.UTF8 LC_IDENTIFICATION=en_GB.UTF8 LC_COLLATE=en_GB.UTF8 PWD=/home/jmacey LANG=en_GB.UTF-8 LC_MEASUREMENT=en_GB.UTF8 VRAY_SEND_FEEDBACK=0 PS1=[\[\e[33m\]\u\[\e[m\]@\[\e[31m\]\h:\W$\[\e[m\]] HISTCONTROL=ignoredups PS2=[\[\e[33m\]\u\[\e[m\]@\[\e[31m\]\h:\W$\[\e[m\]] VRAY_PATH=:/opt/autodesk/maya2019/vray/bin SHLVL=1 HOME=/home/jmacey PYTHONPATH=/opt/rh/llvm-toolset-7/root/usr/lib/python2.7/site-packages:/opt/pixar/RenderManProServer-24.1/bin:/home/jmacey/NGL/lib:/opt/pixar/RenderManProServer-24.1/bin/pythonbindings LOGNAME=jmacey CVS_RSH=ssh LC_CTYPE=en_GB.UTF8 XDG_DATA_DIRS=/home/jmacey/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share SSH_CONNECTION=10.200.10.106 55523 10.121.2.251 22 LESSOPEN=||/usr/bin/lesspipe.sh %s PKG_CONFIG_PATH=/opt/rh/llvm-toolset-7/root/usr/lib64/pkgconfig:/opt/rh/devtoolset-9/root/usr/lib64/pkgconfig:/public/devel/2021/vcpkg/installed/x64-linux/lib/pkgconfig INFOPATH=/opt/rh/devtoolset-9/root/usr/share/info CMAKE_PREFIX_PATH=:/home/jmacey/NGL:/opt/qt/5.15.2/gcc_64/lib/cmake/ XDG_RUNTIME_DIR=/run/user/12307 LC_TIME=en_GB.UTF8 CUDA_CACHE_MAXSIZE=268435456 LC_NAME=en_GB.UTF8 _=/usr/bin/env
The environment from the
env -i bash call is much smaller
PATH=/home/jmacey/.pyenv/shims:/usr/local/bin:/usr/bin PWD=/home/jmacey PS1=[\[\e[33m\]\u\[\e[m\]@\[\e[31m\]\h:\W$\[\e[m\]] PS2=[\[\e[33m\]\u\[\e[m\]@\[\e[31m\]\h:\W$\[\e[m\]] SHLVL=1 PYTHONPATH=:/home/jmacey/NGL/lib _=/usr/bin/env
After going through a lot of different variables I discovered that
unset HOME made it work! (Proper WTF moment).
Ok this is weird, by default
echo $HOME /home/jmacey
which is what I expect, however repeating this with
env -i bash returns an empty string (as a clean environment).
export HOME=/tmp /opt/autodesk/maya/bin/mayapy -c "import maya.standalone;maya.standalone.initialize(name='python');maya.cmds.file( f=True, new=True );maya.standalone.uninitialize()"
Works fine, so the problem is to do with my home directory. Lets try another dir /transfer. This works ok too. I’m getting confused.
Using chmod to change folder permissions has no difference so it’s not that. This has something to do with some files or config in the root of my home directory.
Something in my home directory, let’s copy my maya setup to this new tmp dir and see what happens.
export HOME=/tmp cp -r ~/maya /tmp
This now breaks what was working, so it is something in the maya setup, infact it was in my userSetup.py file
I have the following in my userSetup.py to get the VSCode editor to work (which doesn’t work very well)
melPort=':7004' pythonPort=':7005' if cmds.commandPort(melPort ,q=True) : print("closing mel port") cmds.commandPort(melPort,cl=True) cmds.commandPort(name=melPort,echoOutput=True,sourceType='mel') if cmds.commandPort(pythonPort ,q=True) : print("closing python port") cmds.commandPort(pythonPort,cl=True) cmds.commandPort(name=pythonPort,echoOutput=True, sourceType='python')
removing this and all works. I’m guessing this gets run before maya is ready and it wait for the port and freezes. The easiest way to overcome this is to put this code in the userSetup.mel file which I have now done.
I’m guessing it makes sense to use userSetup.mel for most things in maya (I would also guess evalDeffered is best) to not have issues when using standalone maya. Not really sure if this is user error or a bug in maya.standalone as there is little documentation it’s hard to tell. It did make another good example for debugging.