CI | status |
---|---|
pip builds | |
wheels |
This repository contains a tiny project showing how to create C++ bindings using nanobind and scikit-build-core. It was derived from the corresponding pybind11 example project developed by @henryiii.
- Clone this repository
- Run
pip install ./wood_nano
The .github/workflows
directory contains two continuous integration workflows
for GitHub Actions. The first one (pip
) runs automatically after each commit
and ensures that packages can be built successfully and that tests pass.
The wheels
workflow uses
cibuildwheel to automatically
produce binary wheels for a large variety of platforms. If a pypi_password
token is provided using GitHub Action's secrets feature, this workflow can
even automatically upload packages on PyPI.
Repository wood_nano has submodule wood in src directly. For new clones incase there is nothing in the src/wood folder do the following:
git submodule update --init --recursive
conda config --add channels conda-forge
conda create -n wood python==3.8.16 pypy=7.3.11
C:/Users/petras/.rhinocode/py39-rh8/python.exe -m pip install .
import os
import os.path as op
import sys
import ctypes
CONDA_ENV = r'C:\Users\petras\.conda\envs\wood'
COMPAS_WOOD_PATH = r'C:\brg\2_code\wood_nano\build\pp38-pypy38_pp73-win_amd64\Release'
sys.path.append(op.join(CONDA_ENV, r"Lib\site-packages"))
sys.path.append(COMPAS_WOOD_PATH)
os.add_dll_directory(op.join(CONDA_ENV, r'Library\bin'))
os.add_dll_directory(COMPAS_WOOD_PATH)
import nanobind_example
print(nanobind_example.add(1, 2))
cd ~/brg/2_code/wood_nano/src
git submodule add https://github.com/petrasvestartas/wood.git
cd wood
sudo '/home/petras/brg/2_code/wood_nano/src/wood/install_ubuntu.sh'
For update:
git submodule update --init --recursive
# git submodule foreach git pull origin main
sudo rm -r build
- Ubuntu - linked, Check: a) PCH is not speeding the build, b) SQL has no be unlocked like this
sudo chown -R
- for development you need to use pip install . and even you changed init.py
- function based on the EDX tutorial
- Process: - add c++ and binded method in nanobind_binding.cpp - run pip install -e . to check if there are no C++ mistake - import the method in src/wood_nano/init.py - test the imported method in tests/test_basic.py - compas_wood - create a file called src/compas_wood/binding/binding_read_xml_polylines.py - compas_wood - add this name in init.py - compas_wood - fill the contents of the file and create a test under if name == "main" - compas_wood - write docstrings under the method - compas_wood - invoke docs and check the result
conda config --add channels conda-forge
conda create -n compas_wood_3_9_10 python==3.9_10 compas
conda activate compas_wood_3_9_10
conda install build setuptools wheel twine
sudo apt install twine or conda install twine
cookiecutter gh:compas-dev/compas_package_template
export PATH="~/anaconda3/envs/compas_wood/bin:$PATH"
sudo apt install invoke
pip install -r requirements.txt
- add requirements wood-nano
- rewrite examples
- compas_wood must be installable by
pip install compas_wood
- documentation based on edx tutorials
- create compas_model with vizualization
- upload to pip https://github.com/petrasvestartas/compas_snippets
To build and upload your package to PyPI, follow these steps:
-
Build the package:
python -m build --wheel
-
Upload the package using
twine
with an API token:twine upload dist/* -u __token__ -p <your-api-token>
-
Upload to pip: https://github.com/petrasvestartas/pypi
conda create -n compas_wood_3_9_10 python==3.9.10 build setuptools wheel twine auditwheel
ubuntu:
export BUILDING_DIST="1" && python -m build --wheel
sudo apt-get install patchelf
sudo docker build -t manylinux2014_gcc13 .
auditwheel repair dist/wood_nano-0.0.7-cp39-cp39-linux_x86_64.whl --plat manylinux_2_35_x86_64 -w dist/
windows:
conda create -n compas_wood_3_9_10 python==3.9.10 build setuptools wheel twine
To resolve Git conflicts on a Mac, follow these steps:
-
Print the Python path for compas_rhino:
python -m compas_rhino.print_python_path
-
Install the package using pip:
sudo -H /Users/petras/.rhinocode/py39-rh8/python3.9 -m pip install .
-
Install the package with the in-tree build feature:
sudo -H /Users/petras/.rhinocode/py39-rh8/python3.9 -m pip install . --use-feature=in-tree-build
In this case, the default message is pre-filled, but you can modify it if needed. To proceed with the merge and accept the default commit message, you can follow these steps:
- Press
i
on your keyboard to enter insert mode in the text editor. - Make any changes to the commit message if necessary.
- Once you're done, press
Esc
to exit insert mode. - Type
:wq
to save the commit message and exit the text editor. If you're using Vim, this command writes the changes and quits the editor.