Skip to content
immki edited this page Nov 25, 2021 · 33 revisions
  • New in 3.3: Jep can be built on Windows with python setup.py build.
  • New in 3.4: Jep is easier to build on Windows, requiring less configuration steps.

Build Setup

Special thanks goes to David Lovely, Günther Weidenholzer, and Nikolas Falco for getting variations of the Windows build working and sharing their notes and experience.

CPython extensions generally need to be built with the same compiler that built Python. That's usually MSVC, and MSVC needs to be installed prior to building Jep, but sadly it's not that simple. You must build with very specific versions of MSVC for this to work correctly, and you may need to install extra packs if you want 64-bit.

Any deviation from this (i.e. MinGW or a different version of MSVC) is at your own risk. If you manage to successfully build with variations and have a working and stable Jep, we'd love to hear about it. The following steps presume you allow MSVC to install to its default directories. If you install MSVC elsewhere, you may have to slightly alter steps that mention specific paths.

The steps to build are rather specific based on the compiler. We recommend you don't have all these compilers installed simultaneously, if you need something like that, virtual machines are the way to go. This Python page may prove helpful in finding the right compiler.

Python 2.7 MSVC++ Build Setup

This is the easiest way to build Jep with Python 2.7 for Windows. Microsoft released a compiler specifically for building Python and CPython extensions with Python 2.7. The compiler is freely available and known as the Microsoft Visual C++ Compiler for Python 2.7. Thankfully this compiler supports both 32-bit and 64-bit. After downloading and installing the compiler, skip down to the Running the build step.

Python 2.6 or 2.7 MSVC Build Setup

The official Python 2 was built with Microsoft Visual Studio Express 2008, so that's the official way to build Jep for Python 2. The compiler is freely available and also known as MSVC 9.0. You will need to download and install it. Finding a download link can be difficult, here is one that is working:

If you want to build 32-bit, skip down to the Running the build step.


If you want to build 64-bit, continue on with these steps:

  1. You need to download and install the Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1. It is very important that you use this download with .NET Framework 3.5, the installer with .NET Framework 4 will not work as it assumes Visual Studio 2010.
  2. When you run the installer, it will prompt you about what to install. You need to install the following:
    • Windows Headers and Libraries
    • Visual C++ Compilers
    • Win32 Development Tools (under Windows Development Tools)
  3. Copy C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars64.bat to C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\vcvarsamd64.bat.
  4. Proceed to the Running the build step.

Python 3.3 and 3.4 MSVC Build Setup

The official Python 3.3 and Python 3.4 were built with Microsoft Visual Studio Express 2010, so you should build Jep with that. It is freely available and also known as MSVC 10.0. You will need to download and install it. Finding a download link can be difficult, here is one that is working:

If you want to build 32-bit, skip down to the Running the build step.


If you want to build 64-bit, continue on with these steps:

  1. You need to download and install the Microsoft Windows SDK for Windows 7 and .NET Framework 4. It is very important that you use this download with .NET Framework 4, the installer with .NET Framework 3.5 will not work as it assumes Visual Studio 2008.
  2. When you run the installer, it will prompt you about what to install. You need to install the following:
    • Windows Native Code Development
      • Windows Headers and Libraries
      • Tools
      • Visual C++ Compilers
  3. You can't build Jep 64-bit with an ordinary command prompt. Instead go to Start -> All Programs -> Microsoft Windows SDK 7.1 -> Windows SDK 7.1 Command Prompt.
  4. Proceed to the Running the build step.

Python 3.5 and 3.6 MSVC Build Setup

The official Python 3.5 and Python 3.6 were built with Microsoft Visual C++ 2015 Build Tools, Microsoft Visual Studio 2015, or Microsoft Visual Visual Studio 2017, so you should build Jep with one of those. The compiler is freely available and also known as MSVC 14.0. You will need to download and install it, the easiest one to use is Microsoft Visual C++ 2015 Build Tools. Here are some download links:

Note we have not tried building 32-bit Jep on Windows with Python 3.5 and 3.6. You may or may not need to do the following steps.


If you want to build 64-bit, continue on with these steps:

  1. You need to download and install the Microsoft Visual C++ 2015 Build Tools.
  2. When you run the installer, it will prompt you about what to install. You need to install the following:
    • Windows 8.1 SDK
    • Windows 10 SDK
  3. Proceed to the Running the build step.

Running the build

Presuming you completed the steps above for your version of Python, you should be ready to build Jep. You might want to make a virtualenv to keep things isolated, and if you wanted numpy support you should install it now if it's not already installed. An easy way to get a numpy install working on Windows is to download a wheel from this page: http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

If you want to install the numpy wheel, use pip install path/to/wheelfile.whl. If you're using virtualenv, make sure you run the pip command after you've activated the virtualenv so numpy installs to the virtualenv.

To run the build, from the jep dir use python setup.py build. If all goes well you will end up with a build dir with some jars, jep.dll, jep.bat, and a few other files. Running python setup.py test will let you run the unit tests. Running python setup.py install will place the files in their appropriate locations:

  • Python's Lib/site-packages/jep directory
    • jep *.py files
    • jep jar file
    • jep.dll
  • Python's Scripts directory
    • jep.bat

If you'd like further testing, simply run the jep.bat file to use the interactive interpreter.

Further Help

Should you diverge from this path, or get stuck, someone else may have run into the same problems as you. The following Stack Overflow pages are quite useful for trying to build CPython extensions on Windows:

Other Insights

The setup.py build command should produce a jep.pyd file and a jep.dll file. pyd files are very similar to DLLs. (In Jep they are identical but the file extension is very important). If Python were to load the library, we'd probably want a pyd file, but since the library will be loaded from Java, we need a DLL. The DLL will retain a manifest in the file so the operating system can load it correctly. The setup.py install command should only install the jep.dll file. If by chance you somehow end up with both jep.pyd and jep.dll installed, you must remove the jep.pyd file as it will get loaded first and will not work correctly.

Clone this wiki locally