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.
TL;DR
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 :-)
Investigation
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).
Serisouly WTAF?
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).
Doing
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.
A solution
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.
Final thoughts
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.