pycrc is a free, easy to use Cyclic Redundancy Check (CRC) calculator and C source code generator.
Python 3.10 or newer is required to run pycrc. The last version compatible with Python 2 is v0.9.x.
The easiest way to run pycrc is to install it in a virtual environment, e.g.:
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install pycrc
Then the pycrc executable is included in the path in the virtual environment:
pycrc [OPTIONS]
or
python3 -m pycrc [OPTIONS]
Install pycrc (if required) using pip:
python3 -m pip install pycrc
or apt (on Debian 13 and later, Ubuntu 23.10 and later, and derivatives):
sudo apt install pycrc
Either of these will install a pycrc binary in the path.
Once installed you can also run it as a module:
python3 -m pycrc [OPTIONS]
Create a virtual environment and install the package in editable mode together with the development tools:
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install -e ".[dev]"
Run the whole test suite with pytest:
pytest
The tests in test/test_codegen.py and test/test_cli.py generate C source
code, compile it and run it, so a C compiler (cc) must be installed and
available on the PATH.
To run a single test file, class or function, pass it to pytest:
pytest test/test_algorithms.py
pytest test/test_codegen.py::TestCodeGen
pytest test/test_algorithms.py::test_all_models_with_check_input
To measure test coverage (and enforce the minimum coverage configured in
pyproject.toml):
pytest --cov=pycrc --cov-report=term-missing
The code generation and CLI tests spawn subprocesses. To include the code that
runs in those subprocesses in the coverage report, point
COVERAGE_PROCESS_START at pyproject.toml, as the CI workflow does:
COVERAGE_PROCESS_START="$PWD/pyproject.toml" pytest --cov=pycrc --cov-report=term-missing
Checking the code style and types
ruff check .
mypy
Build the source and wheel distributions with:
python3 -m build
If you are new to pycrc and want to generate C code, start with the tutorial.
The pycrc manual page explains the command line options in some detail and also gives some more examples how to use pycrc.
If you have found a bug in pycrc or want to request a feature please take the time and submit it to the issue tracker. Thanks for your help.
Also see the frequently asked questions.
If you like pycrc, let me know and drop me a note. If you don't like pycrc let me know what you don't like and why. If you want some idea how to say thanks for this software, please have a look here.
The MIT licence allows commercial use of the source and the output of the program. But since I got asked on occasion whether the generated code is encumbered by the copyright of the author, I give my view on this:
The code generated by pycrc is not considered a substantial portion of the software, therefore the licence does not cover the generated code; the author of pycrc will not claim any copyright on the generated code.