This is the documentation page for the Python 3.6+ wrapper of OR-Tools.
This project aim to explain how you build a Python native wheel package using
setup.py
.
You'll need "Python >= 3.6" and few python modules ("wheel" and "absl-py").
- setup.py.in
Setup.py
template to build the python native project.
To Create a native dependent package which will contains two parts:
- A bunch of native libraries for the supported platform targeted.
- The Python code depending on it.
platform
names
come from the JNA project (Java Native Access) which will be use to find at
runtime on which platform the code is currently running.
The pipeline for linux-x86-64
should be as follow:
note: The pipeline will be similar for other architectures, don't hesitate to
look at the CI log!
Thus we have the C++ shared library libortools.so
and the SWIG generated
Python wrappers e.g. pywrapsat.py
in the same package.
Here some dev-note concerning this setup.py
.
- This package is a native package containing native libraries.
Then you can generate the package and install it locally using:
python3 setup.py bdist_wheel
python3 -m pip install --user --find-links=dist ortools
If everything good the package (located in <buildir>/python/dist
) should have
this layout:
{...}/dist/ortools-8.0.9999-cp38-cp38-<platform>.whl:
\- ortools
\- __init__.py
\- .libs
\- libortools.so
\- constraint_solver
\- __init__.py
\- pywrapcp.py
\- _pywrapcp.so
\- ...
\- __init__.py
\- pywrap....py
\- _pywrap....so
...
note: <platform>
could be manylinux2010_x86_64
, macosx_10_9_x86_64
or win-amd64
.
tips: since wheel package are just zip archive you can use unzip -l <package>.whl
to study their layout.
Few links on the subject...
- Packaging Python Project
- PEP 513 -- A Platform Tag for Portable Linux Built Distributions
- PEP 571 -- The manylinux2010 Platform Tag
Image has been generated using plantuml:
plantuml -Tsvg doc/{file}.dot
So you can find the dot source files in doc.