scikit-build-cpp-python
Why and What
use scikit-build-core to setup a python-cmake project that can be installed with pip install -e .
Conclusion
- package name has nothing to do with the import path. pacakge named my_package is installed with
pip install .
, uninstalled withpip uninstall my_package
, but can be used asimport kk.ss as ks
. - installation of cpp files:
install(TARGET mylib LIBRARY DESTINATION .)
and set
[tool.scikit-build]
wheel.install-dir = "kk/ss"
- installation of python files:
[tool.scikit-build.wheel.packages]
"mm/tt" = "python/myproj/simulation"
[tool.scikit-build]
wheel.exclude = ["CMakeLists.txt","*.cc","*.h"]
special variable
-
${SKBUILD_PLATLIB_DIR}
: The original platlib directory. Anything here goes directly to site-packages when a wheel is installed. -
${SKBUILD_DATA_DIR}
: The data directory. Anything here goes to the root of the environment when a wheel is installed (use with care). -
${SKBUILD_HEADERS_DIR}
: The header directory. Anything in here gets installed to Python's header directory. -
${SKBUILD_SCRIPTS_DIR}
: The scripts directory. Anything placed in here will go tobin
(Unix) orScripts
(Windows). -
${SKBUILD_METADATA_DIR}
: The dist-info directory. Licenses go in thelicenses
subdirectory. _Note that CMake is not run in theprepare_metadata_\*
hooks, so anything written to this directory will only be present when writing wheels._ -
${SKBUILD_NULL_DIR}
: Anything installed here will not be placed in the wheel.
style and lint check
notebook output stripping
- use pre-commit
- install
pip install pre-commit nbstripout
- set
repos:
- repo: https://gitlab.cern.ch/pre-commit-hook-mirrors/kynan/nbstripout
rev: 0.8.0
hooks:
- id: nbstripout
files: \.ipynb$
- install
pre-commit install
- run and verify
pre-commit run --all-files
or
nox -s pre_commit
c++ formating
- pre-commit + vscode extensions
- install extensions
Name: clangd
Id: llvm-vs-code-extensions.vscode-clangd
Description: C/C++ completion, navigation, and insights
Version: 0.1.30
Publisher: LLVM
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd
and make sure this is in settings.json
:
"[cpp]": {
"editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"
}
- install pre-commit hooks Name: Black Formatter Id: ms-python.black-formatter Description: Formatting support for Python files using the Black formatter. Version: 2024.4.0 Publisher: Microsoft VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter
- repo: https://gitlab.cern.ch/pre-commit-hook-mirrors/pre-commit/mirrors-clang-format
rev: v19.1.3
hooks:
- id: clang-format
files: \.(cpp|hpp|c|h)$
python formatting
- pre-commit + vscode extensions
- install vscode extensions
- install extensions
Name: Black Formatter
Id: ms-python.black-formatter
Description: Formatting support for Python files using the Black formatter.
Version: 2024.4.0
Publisher: Microsoft
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter
and update settings.json
"[python]": {
"editor.codeActionsOnSave": {
"source.organizeImports": "always"
},
"editor.defaultFormatter": "ms-python.black-formatter"
},
"isort.args": ["--profile", "black"],
- install pre-commit hooks
repos:
- repo: https://gitlab.cern.ch/pre-commit-hook-mirrors/psf/black
rev: 24.10.0 # Use the latest stable version
hooks:
- id: black
c++ lint
- nox + vscode extensions
python lint
- ruff: pre-commit + vscode extensions
- pylint: nox + vscode extensions
vscode extensions to install
- "isort", which sort python import
Name: isort
Id: ms-python.isort
Description: Import organization support for Python files using isort.
Version: 2023.10.1
Publisher: Microsoft
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=ms-python.isort
- "pylint", for complrehensive code analysis
Name: Pylint
Id: ms-python.pylint
Description: Linting support for Python files using Pylint.
Version: 2024.0.0
Publisher: Microsoft
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=ms-python.pylint