Skip to main content

Python recommendation tools

Automatic Tests codecov Scientific Python Ecosystem Coordination PyPI - Version Conda Version

LensKit is a set of Python tools for experimenting with and studying recommender systems. It provides support for training, running, and evaluating recommender algorithms in a flexible fashion suitable for research and education.

LensKit for Python (LKPY) is the successor to the Java-based LensKit project.

[!IMPORTANT] If you use LensKit for Python in published research, please cite:

Michael D. Ekstrand. 2020. LensKit for Python: Next-Generation Software for Recommender Systems Experiments. In Proceedings of the 29th ACM International Conference on Information and Knowledge Management (CIKM '20). DOI:10.1145/3340531.3412778. arXiv:1809.03125 [cs.IR].

[!NOTE]

LensKit had significant changes in the 2025.1 release. See the Migration Guide for details.

Installing

To install the current release with uv (recommended):

$ uv pip install lenskit

Or, to add it to your project's dependencies and virtual environment:

$ uv add lenskit

Classic pip also works:

$ python -m pip install lenskit

Then see Getting Started

Conda Packages

You can also install LensKit from conda-forge with pixi:

$ pixi add lenskit

Or conda:

$ conda install -c conda-forge lenskit

Development Version

To use the latest development version, you have two options. You can install directly from GitHub:

$ uv pip install -U git+https://github.com/lenskit/lkpy

Or you can use our PyPI index, by adding to pyproject.toml:

[[tool.uv.index]]
name = "lenskit"
url = "https://pypi.lenskit.org/lenskit-dev/"

Binary wheels of LensKit development (and release) versions are automatically pushed to this index, although they are not guaranteed to be permanently available. Reproducible code should generally depend on released versions published to PyPI.

Simplifying PyTorch installation

We also provide mirrors of the PyTorch package repositories that are filtered to only include PyTorch and directly supporting dependencies, without other packages that conflict with or mask packages from PyPI, and with fallbacks for other platforms (i.e., our CUDA indices include CPU-only MacOS packages). This makes it easier to install specific versions of PyTorch in your project with the index priority and fallthrough logic implemented by uv. To make your project only use CPU-based PyTorch, you can add to pyproject.toml:

[[tool.uv.index]]
name = "torch-cpu"
url = "https://pypi.lenskit.org/torch/cpu/"

Or CUDA 12.8:

[[tool.uv.index]]
name = "torch-gpu"
url = "https://pypi.lenskit.org/torch/cu128/"

These indices provide the same package distributions as the official PyTorch repositories (in fact, they link directly to the PyTorch packages). They are just an alternate index view that reduces some package conflicts.

Developing

To contribute to LensKit, clone or fork the repository, get to work, and submit a pull request. We welcome contributions from anyone; if you are looking for a place to get started, see the issue tracker.

Our development workflow is documented in the wiki; the wiki also contains other information on developing LensKit. User-facing documentation is at https://lkpy.lenskit.org.

We use uv for developing LensKit and managing development environments. Our pyproject.toml file contains the Python development dependencies; you also need a working Rust compiler (typically via rustup). Before setting up to work on LensKit, you therefore need:

  • Git
  • uv
  • rustup and a working Rust compiler (rustup install stable)
  • A working C compiler compatible with Python
    • On Windows, this is either Visual Studio (with C++ development) or the Visual C++ Build Tools. See the Rustup Windows install instructions for details.
    • On Mac, install Xcode.
    • On Linux, see your system package manager instructions.
Windows

On Windows, you can install dependencies (except for the Visual C++ tools) with winget:

> winget install Git.Git astral-sh.uv Rustlang.Rustup
> rustup install stable-msvc
Mac

On Mac, you can install the dependencies with Homebrew:

$ brew install git uv rustup

Once you have the dependencies installed, set up your LensKit development environment:

$ uv venv -p 3.12
$ uv sync

If you want all extras (may not work on Windows), do:

$ uv sync --all-extras

You can then activate the virtual environment to have the tools available and run tools like pytest:

$ . ./.venv/bin/activate

Testing Changes

You should always test your changes by running the LensKit test suite:

pytest tests

If you want to use your changes in a LensKit experiment, you can locally install your modified LensKit into your experiment's environment. We recommend using separate environments for LensKit development and for each experiment; you will need to install the modified LensKit into your experiment's repository:

uv pip install -e /path/to/lkpy

Resources

Acknowledgements

This material is based upon work supported by the National Science Foundation under Grant No. IIS 17-51278. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lenskit-2025.8.1.tar.gz (3.0 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

lenskit-2025.8.1-cp311-abi3-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.11+Windows x86-64

lenskit-2025.8.1-cp311-abi3-win32.whl (2.5 MB view details)

Uploaded CPython 3.11+Windows x86

lenskit-2025.8.1-cp311-abi3-manylinux_2_28_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ x86-64

lenskit-2025.8.1-cp311-abi3-manylinux_2_28_aarch64.whl (7.4 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ ARM64

lenskit-2025.8.1-cp311-abi3-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

lenskit-2025.8.1-cp311-abi3-macosx_10_12_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.11+macOS 10.12+ x86-64

File details

Details for the file lenskit-2025.8.1.tar.gz.

File metadata

  • Download URL: lenskit-2025.8.1.tar.gz
  • Upload date:
  • Size: 3.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for lenskit-2025.8.1.tar.gz
Algorithm Hash digest
SHA256 954b22a81e8a0d2012a173340079aa3d0c68dcc8cb9954e488fc228d77d4cb55
MD5 981bfab15b8fffc1c029134e77c3ed2c
BLAKE2b-256 85d4b0f120bd01fe614520281afd21b80b4222ef138e687f861a3f3ea4bbab7a

See more details on using hashes here.

Provenance

The following attestation bundles were made for lenskit-2025.8.1.tar.gz:

Publisher: package.yml on lenskit/lkpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lenskit-2025.8.1-cp311-abi3-win_amd64.whl.

File metadata

  • Download URL: lenskit-2025.8.1-cp311-abi3-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.11+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for lenskit-2025.8.1-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7e30cc3ba9492b257ef8ed67352ccfba812aa6cb09b5da28ace9eaec33f8e957
MD5 c02822cd56b81f9306dfb85edcbbbee7
BLAKE2b-256 9f9bde17cdc0ba140ab1242c2de168d05af8a97d3e139666e9e335ad4c6a2c4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for lenskit-2025.8.1-cp311-abi3-win_amd64.whl:

Publisher: package.yml on lenskit/lkpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lenskit-2025.8.1-cp311-abi3-win32.whl.

File metadata

  • Download URL: lenskit-2025.8.1-cp311-abi3-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.11+, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for lenskit-2025.8.1-cp311-abi3-win32.whl
Algorithm Hash digest
SHA256 b993502d493f22d85af68685dd913135a1cd3bbbfc2c1c712292f54ebd8fde57
MD5 b8f23bce393f294c49c8a55cf1511c64
BLAKE2b-256 8cf7cfbb5b73bcf56aa0b091ae9e300732e4a3880ce276de8e74d130b660d38f

See more details on using hashes here.

Provenance

The following attestation bundles were made for lenskit-2025.8.1-cp311-abi3-win32.whl:

Publisher: package.yml on lenskit/lkpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lenskit-2025.8.1-cp311-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for lenskit-2025.8.1-cp311-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6b52753e0615a662b8b9ca470a6ddac63b6f3961fc1d9bc2005a1ca6c0da805c
MD5 e0bcdce10519cdade64a01edb9a21508
BLAKE2b-256 1499b9805ce607da87a006529f4a173ebcc87108854738bbb3d64bea517487a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for lenskit-2025.8.1-cp311-abi3-manylinux_2_28_x86_64.whl:

Publisher: package.yml on lenskit/lkpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lenskit-2025.8.1-cp311-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for lenskit-2025.8.1-cp311-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 36766b3e5b056b9a44f7dc2c0526ddb24abe3ba0d84c2cd712cb0616137e88e9
MD5 e36d19f1ba5ae0b76f9d14fd37945fb5
BLAKE2b-256 d897af3e55512aa39a80eed828cd72817cdf23090e110c8063f552b10cfdb281

See more details on using hashes here.

Provenance

The following attestation bundles were made for lenskit-2025.8.1-cp311-abi3-manylinux_2_28_aarch64.whl:

Publisher: package.yml on lenskit/lkpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lenskit-2025.8.1-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for lenskit-2025.8.1-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 99751dec434c8feb385c571e3388b8947332678fd130043410a07e05382d6a1e
MD5 ff1615453450adfe685e970bb81d8362
BLAKE2b-256 7b6582156f8110a4f50b7d03dbf2de445ca930bed15d052b656c3e5778a25cb8

See more details on using hashes here.

Provenance

The following attestation bundles were made for lenskit-2025.8.1-cp311-abi3-macosx_11_0_arm64.whl:

Publisher: package.yml on lenskit/lkpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lenskit-2025.8.1-cp311-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for lenskit-2025.8.1-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 83eaba800d9919ce11448a9bd959cc4b2714769f67924976248c1e65e8872cc1
MD5 48e576b3b2f741218228f16e8eed3820
BLAKE2b-256 b193767f9f64b04af487387055ab0ccdb5772f59fdcb87d983de3421c9ebe0f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for lenskit-2025.8.1-cp311-abi3-macosx_10_12_x86_64.whl:

Publisher: package.yml on lenskit/lkpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page