zenodo_get: a downloader for Zenodo records
A Python tool for downloading files from Zenodo records. Requires Python 3.10+.
Installation
The simplest way (no installation needed) is using uvx, a tool runner from uv:
uvx zenodo_get RECORD_ID_OR_DOI
Alternatively, install with pipx or pip:
pipx install zenodo-get
# or
pip install zenodo-get
Usage
uvx zenodo_get RECORD_ID_OR_DOI
Common Options
| Option | Description |
|---|---|
-o DIR |
Output directory (created if needed) |
-g PATTERN |
Filter files by glob pattern (e.g., -g "*.pdf") |
-m |
Generate md5sums.txt for verification |
-w FILE |
Write URLs to file instead of downloading (-w - for stdout) |
-e |
Continue on error (skip failed files) |
-n |
Start fresh (don't resume previous download) |
-v N |
Verbosity level 0-4 (default: 2) |
--proxy URL |
Use an HTTP(S) or SOCKS5 proxy |
--no-proxy |
Disable proxy use, including environment variables |
Proxy settings follow curl's CGI-safe environment policy: HTTPS_PROXY/https_proxy apply to HTTPS requests,
ALL_PROXY/all_proxy applies to all requests, and NO_PROXY/no_proxy bypasses matching hosts. HTTP_PROXY and
http_proxy are ignored. Detected proxies are logged at verbosity levels above 0 with credentials redacted.
Retry Options
| Option | Description |
|---|---|
--max-http-retries N |
HTTP retries with exponential backoff (default: 5) |
--backoff-factor N |
Backoff multiplier in seconds (default: 0.5) |
-R N |
Application-level retries for checksum failures (default: 1) |
-p N |
Pause between retries in seconds (default: 3) |
-t N |
Connection timeout in seconds (default: 25) |
Examples
# Download all files from a record
uvx zenodo_get 1234567
# Download only PDFs to a specific directory
uvx zenodo_get 1234567 -g "*.pdf" -o ./downloads
# Generate URL list for external download manager
uvx zenodo_get 1234567 -w urls.txt
# Use DOI instead of record ID
uvx zenodo_get -d 10.5281/zenodo.1234567
Exit Codes
0: All files downloaded successfully- Non-zero: Error occurred (checksum mismatch, download failure, timeout, etc.)
Python API
You can use zenodo_get as a library in your Python projects.
Installation
# Add to your project
uv add zenodo-get
# or
pip install zenodo-get
Usage
from zenodo_get import download
# Download all files from a record
download("10.5281/zenodo.1234567", output_dir="./data")
# Download only specific files using glob pattern
download(
record_or_doi="1234567",
output_dir="./data",
file_glob="*.csv",
)
# Multiple glob patterns
download(
record_or_doi="1234567",
output_dir="./data",
file_glob=["*.csv", "*.json"],
)
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
record_or_doi |
str |
- | Zenodo record ID or DOI |
output_dir |
str | Path |
"." |
Output directory |
file_glob |
str | tuple |
"*" |
Filter files by glob pattern(s) |
md5 |
bool |
False |
Generate md5sums.txt |
continue_on_error |
bool |
False |
Continue on download errors |
start_fresh |
bool |
False |
Don't resume previous download |
timeout |
float |
15.0 |
Connection timeout in seconds |
exceptions_on_failure |
bool |
True |
Raise exceptions on errors |
Citation
If you use this tool in academic work:
uvx zenodo_get --cite
Metadata
Release files for zenodo-get 3.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| zenodo_get-3.1.0.tar.gz | 32.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zenodo_get-3.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 75.7 kB
Release files / zenodo_get-3.1.0.tar.gz
| Download URL | zenodo_get-3.1.0.tar.gz |
|---|---|
| Size | 32.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
73c945198853aa362cf8ce6a71b9f1112671ce995622a1969978ffdf12ecd10f
|
|
BLAKE2b-256 checksum How to use checksums |
d4666a89b7feb17ec109f914ceb247c71dc991becd5d0dc24d7be977f34a9ebd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|
Release files / zenodo_get-3.1.0-py3-none-any.whl
| Download URL | zenodo_get-3.1.0-py3-none-any.whl |
|---|---|
| Size | 43.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3e7534d56bf911aacdea67b87f795598db566fee853597b2c007f741860d80bf
|
|
BLAKE2b-256 checksum How to use checksums |
b8576876a45e6943a58b30586286e6330312b8704f807ebbeb784360eca140dd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|
Security for zenodo-get 3.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.