Some of us might have encountered a situation where you have to distribute a Python tool which you have made, but you don’t prefer the source code to be open to anyone(for whatever reason it is), or you think a C alternative of the same Python code would be faster (Which I doubt, unless you are writing completely in C/C++). Anyway, such scenarios will lead us to Cython, and you might find it really annoying to make it work with Maya (it was pretty annoying for me atleast).
I thought, why not write down the steps so it could be useful for someone out there who is scratching their head over Cython. Be warned, this isn’t an ideal solution to get it running. But, hey it works for me.
First thing we need is a matching Visual Studio version which Maya used to build its mayapy.exe
I copied the below version details from a stackoverflow post (I dont remember the link to the original post)
For this version of Visual C++ Use this compiler version Visual C++ 4.x MSC_VER=1000 Visual C++ 5 MSC_VER=1100 Visual C++ 6 MSC_VER=1200 Visual C++ .NET MSC_VER=1300 Visual C++ .NET 2003 MSC_VER=1310 Visual C++ 2005 (8.0) MSC_VER=1400 Visual C++ 2008 (9.0) MSC_VER=1500 Visual C++ 2010 (10.0) MSC_VER=1600 Visual C++ 2012 (11.0) MSC_VER=1700 Visual C++ 2013 (12.0) MSC_VER=1800 Visual C++ 2015 (14.0) MSC_VER=1900 Visual C++ 2017 (15.0) MSC_VER=1910
Maya 2018’s python version is built using MSC_VER=1900 (Visual Studio 2015)
To check the version, run this <Maya 2018 installation directory>/bin/mayapy.exe
On the very first line of the python cli, you have information about the build type, architecture, etc.

Grab a copy of Microsoft Visual Studio Community 2015
Before you can download a copy of Visual Studio from Microsoft’s website, you are required to have a Microsoft account. If you already have one, go ahead to your home page and subscribe to Visual Studio Dev (To download an older version of Visual Studio, you have to subscribe to Visual Studio Dev Essentials, it is free !)
Once you have done all these boring stuff, go ahead and click here to go the download page and get a copy of Visual Studio Community 2015
Just incase if you are building for Maya 2017, you will need Visual Studio 2008 which is pretty hard to find. Click here to download
Building python from source
Wait, what ???? 😮
The python build which is provided by python.org is built using MSC 1500(Visual Studio 2008), sadly Cython doesn’t seem to play well if the python build mismatches(I might be wrong, but this way I can copy PySide2 libraries from Maya to the new python build and it should work fine with Cython). Maybe you can try your luck if you would want 😀
Even if it isn’t necessary to rebuild python from source, I thought it might be useful at some point anyway
Before start building python, we might need Python installation for later use(Just a quick way around for future errors), download and install to your desired location. We will need this later, so we call this installation path pythonLib
If your luck ran out, click here to download python 2.7 source files. (It must be a *.tgz file with a *.rar file inside, extract all the way along until you can see a folder named Python-2.7.1, or something similar if you have downloaded a different version of Python)
Make sure you organize the folders from the archive which you have downloaded from the above link, we will need it quite frequently from now onwards. The parent folder where this Python folder resides, lets call it buildRoot
Run the following buildRoot
/Python-2.7.1/Tools/buildbot/external-common.bat
Above step should gather necessary external dependencies like bzip, db, openssl etc. If you do a quick google search, you probably will find blogs which ask you to update these packages to latest versions since the version downloaded by the script above are pretty old. However, our only intention is to make Cython play along well, and we are mostly going to work within Maya. So, we can forget about updating these packages for now. (You may update if it is adequate for whatever projects you are going build with this particular version of Python)
Copy over all the files(which ends with .lib) from pythonLib
/libs
to buildRoot
/Python-2.7.1/PCbuild/amd64
Okay, now lets get started with building python. Open Visual Studio 2015, and open the project File > Open > Project/solution >
buildRoot
/Python-2.7.15/PCbuild/pcbuild.sln
Since the original Python 2.7x project is made using an older version of Visual Studio, the newer version will ask you to upgrade the project. Click ok when prompted

It might take a while to upgrade and open solution in Visual Studio. Once it is done, change your build to Release
and architecture to x64
Now in Visual Studio, go ahead and build the project (Build > Build Solution)
Wait for it. Don’t worry much if you get tons of errors, or if the build fails. As long as it generates python.exe
inside buildRoot
/Python-2.7.1/PCbuild/amd64
you should be good to go (I hope so 😀 )
Before we can start thinking about Cython, you need to understand that Cython helps you build C
representation of your python code and it requires C libraries to be installed on your computer. Download and install mingw
For convenience, add python executable path to environment variable.
Open command prompt and run this,
setx mayapy2018 buildRoot\Python-2.7.1\PCbuild\amd64\python.exe
Please make sure you are able to launch python which we built. Open command prompt and run %mayapy2018%
it should enter the python cli. If it fails for any reason, please make sure you have chosen python source files from the link which I have provided in the beginning. Latest iteration of Python 2.7.x doesn’t seem to work well with Visual Studio 2015.
Now it is about time to download source files of Cython. Yes, we have to build Cython as well, it is not a good idea to mix different C++ run-time builds. Click here to download required version of Cython. Unzip the archive to your buildRoot
For Cython to build successfully, the VC libraries should be available in the environment. Lets save it to the system environment variable since we will need this quite often. Open command prompt and run (Make sure you point it to your visual studio directory)
setx vcpath ("C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64)
We need a small patch for our Python before we can continue, open the file buildRoot\Python-2.7.1\Lib\distutils\msvc9compiler.py
After line 651, add a new line ld_args.append('/MANIFEST')
, save and close the file.
Now lets start building Cython for our version of Python. Open command prompt and run the following,
%vcpath%
SET VS90COMNTOOLS=%VS140COMNTOOLS%
cd buildRoot\cython-0.26
%mayapy2018% setup.py install
You shouldn’t get any errors while building Cython using the above method. To verify, go to buildRoot\Python-2.7.1\Lib\site-packages
, your folder should look like this (Ignore the *.pyc files)

Pheww!! That was harder isn’t it? 😦
Alright, lets make a test python module now. I am explaining these as if I am talking to an absolutely beginner so that it is easy to troubleshoot if something goes wrong.
Create a folder buildRoot\sample_module
, and create below files inside
def say_hello_world(name=None):
print "Hello", name or "world"
Save that as helloworld.py
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("helloworld.py")
)
Save that as setup.py
Now open a new command prompt window and execute below lines of code.
%vcpath%
SET VS90COMNTOOLS=%VS140COMNTOOLS%
cd buildRoot\sample_module
%mayapy2018% setup.py build_ext --build-lib ../compiled_sample
That should create a new file, buildRoot\compiled_sample\helloworld.py
Now, we have to make sure that this compiled version works with python.
Open command prompt and execute %mayapy2018%
to enter python cli.
Then run these,
import sys
sys.path.append(r'buildRoot\compiled_sample')
import helloworld
helloworld.say_hello_world('Cython')
If you are lucky enough, you should something like the below screenshot

Yeah, you guessed it right! Now it is time to test this in Maya 2018 😉
Open Maya and run the same code which we used above to test. You should get the similar result as below
That worked !! 🙂 Now have a read of Cython Documentation I hope this helped someone who is stumbling upon Cython in Maya.
Disclaimer: This is just one way of making Cython work in Maya. Instead of building Python from source, you can also use
mayapy.exe
to build Cython (I wouldn’t want to mess with Maya installation though). Yeah, I agree that this is a long process, but hey, it is one time requirement. Also, please bare in mind that I had Cython setup in my laptop earlier and I had to uninstall pretty much every dependencies and install it again to make sure I haven’t skipped any step which would stop readers from building Cython. However, if something goes wrong, remember Google is your friend.
I am using Windows 10(You might need Windows 10 Dev Kit, get it here) and I haven’t tested in any other Windows version.
July 26, 2019 at 12:42 pm
Hi,
First of all – thanks a lot for this detailed tutorial!
I’m trying to follow the instructions, but I got stuck at cython compilation step.
I get this error:
error: command ‘mt.exe’ failed: No such file or directory
after running:
%mayapy2018% setup.py install
Also, at the very beginning of the output I get this message:
Unable to find pgen, not compiling formal grammar.
Do you have any idea what I am missing? I only found that mt.exe is part of Windows SDK. So, should I just get one for my system version? (Win 10)
LikeLike
July 26, 2019 at 1:44 pm
Hey,
I’m glad you found this useful.
I haven’t run into any of the issues which you have mentioned, so my answers might not actually fix your issues.
About mt.exe, you can try installing Windows SDK, I had it installed. However, mt.exe should be part of visual studio installation. I have posted a link at the very bottom of the tutorial.
About the grammer thing, you can try building pgen from package inside Cython/Parser/pgen.
However a quick google search shows that grammer is not being used. I have looked at the setup.py of cython as well, there are no other dependencies on this. Maybe you can ignore this.
Good luck, I hope it works for you.
LikeLike
July 31, 2019 at 7:55 pm
Thanks, I also had this issue, installing Windows SDK apparently fixed it!
btw thanks for a great tutorial.
LikeLike
August 9, 2019 at 2:35 pm
Hi,
Sorry for the late reply, but I only got time to come back to this today.
I installed Windows SDK Kit and found a correct mt.exe, added a path to it to environment variable and it worked!
Thanks again for your help and this tutorial. I have very little experience with compiling stuff, so this step by step approach was something that let me go through the process, even though most of the time I did not know what I had been doing! 🙂
All the best!
LikeLike
August 9, 2019 at 2:53 pm
Great, I’m glad it worked out for you
LikeLike
November 21, 2020 at 4:56 pm
Hello, I get this error when I try to compile cython:
“Unable to find pgen, not compiling formal grammar.
running install
running build
running build_py
running build_ext
cythoning C:\buildRoot\cython-0.26\Cython\Plex\Scanners.py to C:\buildRoot\cython-0.26\Cython\Plex\Scanners.c
Traceback (most recent call last):
File “setup.py”, line 338, in
**setup_args
…
pos_comment_marker = u’/* \N{HORIZONTAL ELLIPSIS} */\n’
SyntaxError: (unicode error) \N escapes not supported (can’t load unicodedata module)”
Any idea on how to fix that?
Thanks for your tutorial!
LikeLike
November 26, 2020 at 2:18 am
I haven’t encountered such an error. I’m afraid I don’t have a solution for it.
However, if you have built Python from sources, I have found something that might be a cause https://techglimpse.com/python-make-install-unicode-error/
I hope that helps
LikeLike
January 15, 2021 at 12:21 pm
HI
Thank you for your Tutorial
under the part. I download Python-2.71 and I found “PCbuild” folder but there isn’t amd64 folder.
Copy over all the files(which ends with .lib) from pythonLib/libs to buildRoot/Python-2.7.1/PCbuild/amd64
thx
LikeLike
January 15, 2021 at 12:51 pm
hi
Thank you for good tutorial
so I try to setup under the part but I couldn’t find amd64 folder
Copy over all the files(which ends with .lib) from pythonLib/libs to buildRoot/Python-2.7.1/PCbuild/amd64
regard
LikeLike