single |
# 💫 Scientific Python INcantations (`spin`)
## A developer tool for scientific Python libraries
Developers need to memorize a whole bunch of magic command-line
incantations.
And these incantations change from time to time!
Typically, their lives are made simpler by a Makefile, but Makefiles can be
convoluted, are not written in Python, and are hard to extend.
The rationale behind `spin` is therefore to provide a simple interface for
common development tasks.
It comes with a few common build commands out the box, but can easily be
customized per project.
As a curiosity: the impetus behind developing the tool was the mass
migration of scientific Python libraries (SciPy, scikit-image, and NumPy,
etc.) to Meson, after distutils was deprecated.
When many of the build and installation commands changed, it made sense to
abstract away the nuisance of having to re-learn them.
## Installation
`
pip install spin
`
## Configuration
Settings are stored in `.spin.toml`, `spin.toml`, or your project's
`pyproject.toml`.
As an example, see the `[tool.spin]` section of [an example
`pyproject.toml`].
The `[project]` section should contain `name`.
The `[tool.spin]` section should contain:
```
package = "pkg_importname" # name of your package
commands = [
"spin.cmds.meson.build",
"spin.cmds.meson.test"
]
```
See [the command selection] below.
### Command sections
Once you have several commands, it may be useful to organize them into
sections.
In `pyproject.toml`, instead of specifying the commands as a list, use the
following structure:
```toml
[tool.spin.commands]
"Build" = [
"spin.cmds.meson.build",
"spin.cmds.meson.test"
]
"Environments" = [
"spin.cmds.meson.ipython",
"spin.cmds.meson.run"
]
```
These commands will then be rendered as:
```
Build:
build 🔧 Build package with Meson/ninja and install
test 🔧 Run tests
Environments:
ipython 💻 Launch IPython shell with PYTHONPATH set
run 🏁 Run a shell command with PYTHONPATH set
```
## Running
`
spin
`
or
```
python -m spin
```
## Built-in commands
### [Meson]
Available as `spin.cmds.meson.*`.
```
build 🔧 Build package with Meson/ninja and install to
`build-install`
ipython 💻 Launch IPython shell with PYTHONPATH set
python 🐍 Launch Python shell with PYTHONPATH set
|