Skip to main content

sciencehub

Use the functions and data of ScienceHub projects from Python.

A ScienceHub project is a marimo notebook and the files beside it. Every function its author wrote as a reusable function (@app.function) can be called from your own code, and every file can be read. Each project page lists them under Functions and Files.

pip install sciencehub

Load a project

import sciencehub as sh

keeling_curve = sh.load("sciencehub-team/keeling-curve")
keeling_curve
sciencehub-team/keeling-curve · Keeling curve
version NS52YCXV, release 1, https://doi.org/10.83371/sh.2610.jd9q4 · https://sciencehub.sh/sciencehub-team/keeling-curve
Monthly CO₂ at Mauna Loa since 1958: NOAA's record and the functions that read it.

Functions
  load_co2(path: str = DATA) -> pd.DataFrame
      Monthly mean CO₂ in the air at Mauna Loa, Hawaii, in ppm, from March 1958.
  yearly_mean(path: str = DATA) -> pd.Series
      The deseasonalized concentration averaged over each complete year, in ppm, by year.
  growth_rate(start_year: int, end_year: int, path: str = DATA) -> float
      Average growth of CO₂ between two complete years, in ppm a year.
  seasonal_cycle(path: str = DATA) -> pd.Series
      Each month's mean departure from the deseasonalized trend, in ppm: the breath of the northern forests.

Files
  data/co2_mm_mlo.csv  38.8 kB
  README.md            1.2 kB

sh.load takes the name from the project's address: "owner/project" for its main notebook, "owner/project/notebook" for another one, or the address itself.

Call a function

help(keeling_curve.growth_rate)
keeling_curve.growth_rate(2015, 2025)   # 2.63

help(), inspect.signature, Jupyter's ? and editor completion show the signature and docstring the author wrote, before anything is downloaded.

The first call downloads the notebook and its files into a cache, imports the notebook, and calls the function on your computer, with the notebook's folder as the working directory: load_co2() finds data/co2_mm_mlo.csv there, as it does on ScienceHub.

The notebook's dependencies have to be installed in your Python. If one is missing, the error names it; keeling_curve.install() installs everything the notebook declares, with pip or uv.

Calling a function runs its author's code, as installing their package would.

Read the data

Any library that reads through fsspec reads a project's files by their sciencehub:// address (sh:// for short): pandas, polars, xarray, Dask and DuckDB among them.

pip install "sciencehub[fsspec]"
import pandas as pd

co2 = pd.read_csv("sciencehub://sciencehub-team/keeling-curve/data/co2_mm_mlo.csv", comment="#")

The address is owner/project[@version]/path: @release-1 reads what release 1's DOI names, @ver_… one saved version. Files are downloaded once and checked against their SHA-256.

The package reads files without fsspec too:

path = keeling_curve.path("data/co2_mm_mlo.csv")   # downloaded once, checked, then read from disk
keeling_curve.download()                            # the notebook and every file, in one folder

Files of public projects also have a plain address any program can read: https://sciencehub.sh/sciencehub-team/keeling-curve/raw/data/co2_mm_mlo.csv.

Pin a version

A load is always one version, and keeling_curve.version says which. Pin it so your results do not change when the author saves a new one:

sh.load("sciencehub-team/keeling-curve", version="ver_01M4V36RH5ZV0RGFPSNS52YCXV")   # one saved version
sh.load("sciencehub-team/keeling-curve", release=1)            # what DOI release 1 names, files included

Private projects

Make a personal access token with the read scope at sciencehub.sh/settings/tokens and set it as SCIENCEHUB_TOKEN, or pass token= to sh.load.

Settings

Variable What it does
SCIENCEHUB_TOKEN A personal access token, for private projects
SCIENCEHUB_URL Another ScienceHub site than https://sciencehub.sh
SCIENCEHUB_CACHE Where versions are kept; the user cache by default

Apache 2.0.

Metadata

Release files for sciencehub 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sciencehub 0.1.1
File Size Uploaded
sciencehub-0.1.1.tar.gz 14.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sciencehub 0.1.1
File Interpreter ABI Platform
sciencehub-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 27.3 kB

Release files / sciencehub-0.1.1.tar.gz

Download URL sciencehub-0.1.1.tar.gz
Size 14.2 kB
Tags Source
SHA-256 checksum
How to use checksums
e2e5b1779ab37c0556b5a055680423fe649fabc72435a42e13dd9e0f652dcd62
BLAKE2b-256 checksum
How to use checksums
6ce5958f58b0d17e89420e1d7edf2448ae386d50a3c1fc288eee9a6faa37cd7f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / sciencehub-0.1.1-py3-none-any.whl

Download URL sciencehub-0.1.1-py3-none-any.whl
Size 13.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7bf38160067c0a3682a17f1562655804e576545f9d48674fcbac0c6b8aaf1431
BLAKE2b-256 checksum
How to use checksums
c15366a5770a50ab224e2193851f732324bfe6cc81a454fcf6167df511267704
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.2.1

2 release files

0.2.0

2 release files

0.1.2

2 release files

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page