| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
This is an example of how to create a Modern CMake C++/Python Project.
This project aim to explain how you build a Python 3.6+ native wheel package using
Python3 and a setup.py.
e.g. You have a cross platform C++ library (using a CMake based build) and a
Python wrapper on it thanks to SWIG.
Then you want to provide a cross-platform Python packages to consume it in a
Python project...
This project should run on GNU/Linux, MacOS and Windows.
You'll need:
The project layout is as follow:
CMakeLists.txt Top-level for CMake based build.
cmake Subsidiary CMake files.
ci Root directory for continuous integration.
Foo Root directory for Foo library.
Bar Root directory for Bar library.
FooBar Root directory for FooBar library.
python Root directory for Python template files
To complexify a little, the CMake project is composed of three libraries (Foo, Bar and FooBar) with the following dependencies:
Foo:
Bar:
FooBar: PUBLIC Foo PRIVATE BarTo Create a native dependent package which will contains two parts:
note: Since Pypi.org support multiple packages, we will simply upload one package per supported platform.
The pipeline for linux-x86-64 should be as follow:
Thus we have the C++ shared library libFoo.so and the SWIG generated Python wrappers e.g. pyfoo.py in the same package.
Here some dev-note concerning this setup.py.
Then you can generate the package and install it locally using:
python3 setup.py bdist_wheel
python3 -m pip install --user --find-links=dist pythonnativeIf everything good the package (located in <buildir>/python/dist) should have this layout:
{...}/dist/pythonnative-X.Y.9999-cp3Z-cp3Z-<platform>.whl:
\- pythonnative
\- __init__.py
\- .libs
\- libFoo.so
\- ...
\- foo
\- __init__.py
\- pyFoo.py
\- _pyFoo.so
...
note: <platform> could be manylinux2014_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...
Project layout:
CMake:
Python:
Image has been generated using plantuml:
plantuml -Tsvg docs/{file}.dotSo you can find the dot source files in docs.
Apache 2. See the LICENSE file for details.
This is not an official Google product, it is just code that happens to be owned by Google.
| Back | FazBrowse Home | New Git URL |