# Building from source OR-Tools Python on Windows

## Introduction

This guide explains how to build from source OR-Tools, with support for
Python, on Windows.

Unless you plan to modify the source code or use a third-party solver with
OR-Tools, we recommend the [package installation](https://developers.google.com/optimization/install/python/binary_windows).

Although these instructions might also work on other Windows variants, we
have only tested them on machines meeting the following requirements:


Windows 10 64-bit (x86_64) with:

- Microsoft Visual Studio Enterprise 2022
- Microsoft Visual Studio Community 2022 Preview 2 or above

<br />

## Prerequisites

The following sections describe the prerequisites for installing OR-Tools.

### Visual Studio

To build and run OR-Tools on Windows, you must have Visual Studio 2022 or
later installed on your computer with the C++ toolset for Visual Studio.

You can find more details [here](https://visualstudio.microsoft.com/downloads/?q=Build+Tools+for+Visual+Studio).

To build OR-Tools programs from the command line you **must** use a
**x64 Native Tools Command Prompt** (**not** the Developer Command Prompt).

You can find more details [here](https://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line#how-to-get-the-command-line-tools).

### Git

**Git** , which can be downloaded from
<https://git-scm.com/>.

### CMake

**CMake (\>= 3.18)** , which can be downloaded from
<https://www.cmake.org/download>.
When installing CMake, select the option for a command-line accessible cmake.

### Python

You must have one of the following versions of Python installed:

- [Python 3.11.x 64-bit](https://www.python.org/downloads/release/python-3110/)
- [Python 3.10.x 64-bit](https://www.python.org/downloads/release/python-3100/)
- [Python 3.9.x 64-bit](https://www.python.org/downloads/release/python-390/)
- [Python 3.8.x 64-bit](https://www.python.org/downloads/release/python-380/)

Then verify that you have pip 9.01 or higher available in your PATH:

    python --version
    python -c "import platform; print(platform.architecture()[0])"
    python -m pip --version

## Download the source code

There are two distinct branches of the OR-Tools source code on
[GitHub](https://github.com/google/or-tools): `stable` and `main`.

The `stable` branch has been thoroughly tested and should work flawlessly on all
supported platforms.  

The `main` branch is where the latest updates and
improvements have been applied; it's more current, but less stable.

### Download the stable source code

You can get the stable source code for OR-Tools in either of the following ways:

- Clone the `stable` branch by entering:

      git clone https://github.com/google/or-tools

- Download the latest release in a compressed file, by clicking the
  `Clone or download` button in [GitHub](https://github.com/google/or-tools).
  ![image of clone or download button](https://developers.google.com/optimization/images/clone-or-download.png)

> [!WARNING]
> **Warning:** The full path to the installation directory (where you extract the files) must not contain any spaces.

### Download the main source code

To retrieve the source code from the `main` branch, enter:

    git clone -b main https://github.com/google/or-tools

### Download previous releases

You can get the source code for previous releases in either of the following ways:

- Download a previous release from the [GitHub release page](https://github.com/google/or-tools/releases).
- Assuming you have already created a local repository (by `git clone`),
  you can check out a specific release using a Git
  [tag](https://github.com/google/or-tools/tags).
  For example, to work with the v9.12 release instead of the
  `main` branch, enter the following commands in your local repo:

      git fetch --all --tags --prune
      git checkout tags/v9.12 -b v9.12

## Configure the build

Before building OR-Tools, you'll need to configure the CMake build system
generator.

Open a terminal and navigate to the directory where you extracted the files.
Then enter:


    cmake -S . -B build -DBUILD_DEPS=ON -DBUILD_PYTHON=ON

<br />

> [!TIP]
> **Tip:** For a complete list of available OR-Tools CMake options, please take a look [here](https://github.com/google/or-tools/tree/stable/cmake#readme)

Checkout the
[CMake documentation](https://cmake.org/cmake/help/latest/manual/cmake.1.html#generate-a-project-buildsystem)
for details.

### Using SCIP

Since v7.8, SCIP is now integrated so you won't have to install it manually.

> [!NOTE]
> **Note:** You can disable the support of SCIP solver by using `-DUSE_SCIP=OFF`

> [!WARNING]
> **Warning:** While OR-Tools ships with SCIP, please consult the [SCIP license](https://scipopt.org/index.php#license) to ensure that you are complying with it.

### Using Gurobi

Gurobi is now pre-integrated. When needed, at runtime, OR-Tools will search for
the Gurobi shared library in the default install path of the Gurobi installers
on MAC OS X and Windows, or by using the `GUROBI_HOME` environment variable.

> [!NOTE]
> **Note:** You can disable the support of Gurobi solver by using `-DUSE_GUROBI=OFF`

### Using FICO Xpress

FICO Xpress is now pre-integrated. When needed, at runtime, OR-Tools will search
for the Xpress shared library in the default install path of the Xpress
installers, or by using the `XPRESSDIR` environment variable.

> [!NOTE]
> **Note:** You can disable the support of Xpress solver by using `-DUSE_XPRESS=OFF`

### Using an optional third-party MIP solver

You can also use OR-Tools with any of the following optional third-party MIP
solvers whose support is disabled by default:

- [CPLEX](https://www.ibm.com/analytics/cplex-optimizer)
- [GLPK](https://www.gnu.org/software/glpk/) (Linux and MacOS only)

Please take a look at
[this documentation](https://github.com/google/or-tools/tree/main/cmake#enabling-cplex-support)
for details.

## Build the source code

To build the source code, open a terminal and navigate to the directory where
you extracted the files. Then enter the following command to compile OR-Tools:


    cmake --build build --config Release --target ALL_BUILD -j -v

<br />

Checkout the
[CMake documentation](https://cmake.org/cmake/help/latest/manual/cmake.1.html#build-a-project)
for details.

## Test the source code

You can check that everything is running correctly by entering:


    cmake --build build --config Release --target RUN_TESTS -v

<br />

This runs examples for OR-Tools. If all the examples run
successfully, you are ready to
[get started with OR-Tools](https://developers.google.com/optimization/introduction/python).

## Cleaning the build files

If you need to re-install OR-Tools, the command:


    rm -r build

<br />

will remove all compiled dependencies.
This can be useful for resetting to a clean state.

Then re-enter the commands:


    cmake -S . -B build -DBUILD_DEPS=ON -DBUILD_PYTHON=ON

<br />


    cmake --build build --config Release --target ALL_BUILD -j -v

<br />

## Installing OR-Tools on your operating system

You can install OR-Tools for Python on your operating system by entering:


    cmake --build build --config Release --target INSTALL -v

<br />

> [!TIP]
> **Tip:** To change the default install location please refer to the [`CMAKE_INSTALL_PREFIX`](https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html) documentation.