需要 Python 3.9 及以上版本,低版本无法安装;本地跑集成测试需先克隆 openreview-api、openreview-api-v1、openreview-web 三个同级仓库并配置 docker/config.json;不用 Docker 时需自行启动 API V1、API V2 和 Web 前端,分别占用 3000、3001、3030 端口,并下载 geckodriver 放入 tests/drivers
openreview-py
openreviewMIT活跃维护OpenReview 官方 Python 客户端,封装了 OpenReview API,方便研究者用代码提交论文、管理评审和批量拉取会议数据。
Official Python client library for the OpenReview API
pip install openreview-pyREADME 未说明,仅要求 Python 3.9 或更高版本
OpenReview 官方 Python 客户端库,用来读写 OpenReview 平台上的论文评审与会议数据
OpenReview 官方 Python 客户端,封装了 OpenReview API,方便研究者用代码提交论文、管理评审和批量拉取会议数据。
核心能力
- 封装 OpenReview API,访问和修改平台存储的数据
- 提供官方文档与 How-To 示例,便于快速上手
- 支持用 pip 安装,也可从仓库以可编辑模式安装
- 提供 Docker Compose 集成测试环境,一键起停依赖服务
容易踩的坑
- v2.9.2最新正式版2026-11-05 · 2026-11-05 21:15 UTC
What's Changed
- Add Copilot code review instructions and skills by @melisabok in https://github.com/openreview/openreview-py/pull/3295
- Bump tornado from 6.5.8 to 6.5.9 by @dependabot[bot] in https://github.com/openreview/openreview-py/pull/3257
- Bump nbconvert from 7.17.1 to 7.17.2 by @dependabot[bot] in https://github.com/openreview/openreview-py/pull/3303
- Bump certifi from 2026.2.25 to 2026.10.19 by @dependabot[bot] in https://github.com/openreview/openreview-py/pull/3302
- Skip author emails already sent by the same notification step by @celestemartinez in https://github.com/openreview/openreview-py/pull/3310
Full Changelog: https://github.com/openreview/openreview-py/compare/v2.9.1...v2.9.2
- v2.9.12026-10-21 · 2026-10-21 17:10 UTC
查看更新说明
What's Changed
- Look up anonymous groups with the owning client in tests by @carlosmondra in https://github.com/openreview/openreview-py/pull/3277
- Fix
remove_members_from_groupremoving the wrong member inanonidsgroups by @melisabok with @Copilot in https://github.com/openreview/openreview-py/pull/3264 - Look up the assignee's anonymous group with
memberinstead ofsignatoryin assignment pre-processes by @melisabok in https://github.com/openreview/openreview-py/pull/3289 - Include list of authors in new submission email notifications by @melisabok with @Copilot in https://github.com/openreview/openreview-py/pull/3288
- Add regression test: Submission_Change_Before_Reviewing skips accepted/rejected submissions by @melisabok with @Copilot in https://github.com/openreview/openreview-py/pull/3283
- Journal request: stop the Comment form from listing every profile as a reader by @melisabok in https://github.com/openreview/openreview-py/pull/3284
- skip moving edges when there are no assingments deployed by @melisabok in https://github.com/openreview/openreview-py/pull/3286
- Profile management: require login for profile merge requests and add human verification by @melisabok in https://github.com/openreview/openreview-py/pull/3281
- Fix flaky venue rename by waiting out active jobs by @carlosmondra in https://github.com/openreview/openreview-py/pull/3294
- Workflow templates: reject recruitment responses from users who were not invited by @melisabok in https://github.com/openreview/openreview-py/pull/3293
- Workflow timeline: log missing-input failures instead of posting request form comments by @celestemartinez in https://github.com/openreview/openreview-py/pull/3285
Full Changelog: https://github.com/openreview/openreview-py/compare/v2.9.0...v2.9.1
- v2.9.02026-10-15 · 2026-10-15 16:59 UTC
查看更新说明
Features
- Journal: reviewer roles and configurable review release (RLJ) by @melisabok in https://github.com/openreview/openreview-py/pull/3253
- Feat/ Journal: allow EICs to reverse a desk rejection by @celestemartinez in https://github.com/openreview/openreview-py/pull/3271
- Feat/ Journal: allow EICs to de-anonymize authors of withdrawn and rejected submissions by @celestemartinez in https://github.com/openreview/openreview-py/pull/3270
- Journal: choose whether all Action Editors or only the assigned one can read a submission's forum by @melisabok in https://github.com/openreview/openreview-py/pull/3260
- Add mfa_code_provider for non-interactive MFA login by @carlosmondra in https://github.com/openreview/openreview-py/pull/3273
- ACL Anthology import by @melisabok in https://github.com/openreview/openreview-py/pull/3239
- Journal: submission tracks and Action Editor tracks by @melisabok in https://github.com/openreview/openreview-py/pull/3261
- Journal: give the resubmission's Action Editor access to the previous submission by @melisabok in https://github.com/openreview/openreview-py/pull/3274
Fixes
- Fix/members test by @melisabok in https://github.com/openreview/openreview-py/pull/3265
- Fix/ keep keys if venue group already has it by @celestemartinez in https://github.com/openreview/openreview-py/pull/3267
- ARR: Fix active cycle prune logic by @enrubio in https://github.com/openreview/openreview-py/pull/3240
- Add support for reporting Marimo notebooks as interactive by @cantordust in https://github.com/openreview/openreview-py/pull/3269
New Contributors
- @cantordust made their first contribution in https://github.com/openreview/openreview-py/pull/3269
Full Changelog: https://github.com/openreview/openreview-py/compare/v2.8.0...v2.9.0
- v2.8.02026-10-07 · 2026-10-07 14:44 UTC
查看更新说明
What's Changed
- Fix: keep existing field readers when an invitation defines none by @celestemartinez in https://github.com/openreview/openreview-py/pull/3215
- Fix/ deanonymize the bibtex of withdrawn and desk-rejected submissions by @celestemartinez in https://github.com/openreview/openreview-py/pull/3244
- add setting to revision stage to allow institution edition and author… by @celestemartinez in https://github.com/openreview/openreview-py/pull/3245
- Fix/ Fixes based on ICLR feedback by @celestemartinez in https://github.com/openreview/openreview-py/pull/3250
- fix tests by @melisabok in https://github.com/openreview/openreview-py/pull/3252
- create one invitation per decision string by @celestemartinez in https://github.com/openreview/openreview-py/pull/3149
- fix pc revision test by @celestemartinez in https://github.com/openreview/openreview-py/pull/3255
- reproduce orphan username when the validation fails by @melisabok in https://github.com/openreview/openreview-py/pull/3247
- Feat/add impersonation test by @melisabok in https://github.com/openreview/openreview-py/pull/3242
- tilde id can not be readers of official comments by @melisabok in https://github.com/openreview/openreview-py/pull/3243
- Fix/ Journal: keep submission invitation content by @celestemartinez in https://github.com/openreview/openreview-py/pull/3254
- Bump pyjwt from 2.13.0 to 2.15.0 by @dependabot[bot] in https://github.com/openreview/openreview-py/pull/3246
- Bump urllib3 from 2.7.0 to 2.8.0 by @dependabot[bot] in https://github.com/openreview/openreview-py/pull/3248
Full Changelog: https://github.com/openreview/openreview-py/compare/v2.7.1...v2.8.0
- v2.7.12026-10-05 · 2026-10-05 18:42 UTC
查看更新说明
What's Changed
- Journal: send AI-review email templates for papers with an AI review by @celestemartinez in https://github.com/openreview/openreview-py/pull/3241
- increase package version to 2.7.1 by @celestemartinez in https://github.com/openreview/openreview-py/pull/3251
Full Changelog: https://github.com/openreview/openreview-py/compare/v2.7.0...v2.7.1
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
OpenReview Python library
Prerequisites
Python 3.9 or newer is required to use openreview-py.
Installation
There are two ways to install the OpenReview python library.
Using pip:
pip install openreview-py
From the repository:
git clone https://github.com/openreview/openreview-py.git
cd openreview-py
pip install -e .
Note: Depending on your Python installation you may need to use the command
pip3instead ofpip.
Production / CI Installation
For reproducible deployments, install the package using the pinned lock file as constraints:
pip install -c requirements.txt .
For development (editable install with pinned dependencies):
pip install -c requirements.txt -e .
Updating Dependencies
This project uses pip-tools to manage dependency versions. pyproject.toml declares compatible version ranges, while requirements.txt (production) and requirements-dev.txt (test + docs) contain the exact pinned versions.
To update all dependencies to the latest compatible versions:
pip-compile pyproject.toml -o requirements.txt --strip-extras
pip-compile pyproject.toml --extra test --extra docs -o requirements-dev.txt --strip-extras
To update a single package:
pip-compile --upgrade-package requests pyproject.toml -o requirements.txt --strip-extras
Note:
pip-compileresolves for the Python version of the running interpreter, so the numpy pin in the generated lock files will only match that version. After runningpip-compile, manually replace the numpy line in both lock files with environment-marked entries:numpy==2.0.2 ; python_version < '3.10' numpy==2.2.6 ; python_version == '3.10' numpy==2.4.3 ; python_version >= '3.11'
Usage
The openreview-py library can be used to easily access and modify any data stored in the OpenReview system.
For more information, see the official reference. You can also check the OpenReview docs for examples and How-To Guides
Run Tests with Docker (Recommended)
The easiest way to run the integration tests is with Docker Compose. This requires Docker and that the following sibling repositories are cloned next to openreview-py:
├── openreview-api # https://github.com/openreview/openreview-api
├── openreview-api-v1 # https://github.com/openreview/openreview-api-v1
├── openreview-web # https://github.com/openreview/openreview-web
└── openreview-py # this repo
Set up your config file, then run tests:
cd docker
cp config.example.json config.json
# Edit config.json with your repo paths (required before first run)
# Run a specific test file (services start, tests run, then everything tears down)
./run.py tests/test_client.py
# Run a specific test with verbose output
./run.py tests/test_client.py::TestClient::test_get_groups -v
# Run all tests (takes a long time)
./run.py
Each test run starts infrastructure (MongoDB, Redis, Elasticsearch, web), restarts API servers with a clean database via npm run cleanStart, runs the tests, and tears down all services when done (unless keep_infra is enabled). All services share a network namespace so localhost works everywhere, reusing the same circleci.json configs used in CI.
Serve Mode (Manual Browser Testing)
Start all services with ports exposed to your host machine for manual browser testing:
# Start services only (browse http://localhost:3030)
./run.py --serve
# Populate the database by running a test, then keep services running
./run.py --serve tests/test_icml_conference.py
# Preserve existing data across restarts (skip cleanStart)
./run.py --serve --no-clean
Press Ctrl+C to stop. If keep_infra is enabled, only API servers are stopped and infrastructure stays running. Otherwise, all services are torn down. You can also run docker compose down from another terminal to stop everything.
Combine with --shell to get an interactive shell while services are running:
# Serve with shell access (browse + run scripts/tests)
./run.py --serve --shell
# Populate DB, then drop into shell for manual testing
./run.py --serve --shell tests/test_icml_conference.py
Interactive Shell
Drop into the test container shell for debugging or manual pytest runs:
./run.py --shell
Branch Selection
Use specific branches for sibling repos:
# Override branches via CLI
./run.py --branch-api-v2 feature/new-endpoint tests/test_client.py
# Or configure defaults in docker/config.json (copy from config.example.json)
cp config.example.json config.json
# Edit config.json with your paths and branches
Keeping Infrastructure Between Runs
Use --keep-infra (or set keep_infra: true in config) to keep MongoDB, Redis, Elasticsearch, and web running after tests. Then use --no-clean on the next run to preserve the database:
# First run: populate data, keep infrastructure running after tests
./run.py --keep-infra tests/test_registration_step.py
# Second run: reuse infrastructure and database (skips cleanStart)
./run.py --serve --no-clean
# Or combine: populate, then browse with shell access
./run.py --keep-infra tests/test_registration_step.py
./run.py --serve --shell --no-clean
Note:
--no-cleanrequireskeep_infrato be used. Without it, the database is lost when services are torn down.
Configuration
Copy docker/config.example.json to docker/config.json before your first run. The config file is required and gitignored.
{
"api_v1": { "path": "../../openreview-api-v1", "branch": "main" },
"api_v2": { "path": "../../openreview-api", "branch": "feature/x" },
"web": { "path": "../../openreview-web", "branch": "" },
"mode": "test",
"auto_checkout": true,
"keep_infra": false
}
- path: Relative to
docker/or absolute. Defaults to sibling directories. - branch: Branch to auto-checkout before starting. Empty means use whatever is checked out.
- mode: Default mode (
test,serve). CLI flags override this. - auto_checkout: Set to
falseto disable auto-checkout.--no-checkoutalso disables it. - keep_infra: Set to
trueto keep infrastructure (mongo, redis, ES, web) running after tests. API servers are always torn down in test mode.--keep-infraalso enables it.
Cleanup
# Remove containers (keep volumes for faster next run)
docker compose down
# Full clean (remove volumes too)
docker compose down -v
Note: The first run takes several minutes to pull images and install dependencies. Subsequent runs are much faster thanks to cached named volumes for
node_modulesand Python virtual environments.
Run Tests Locally
To run tests without Docker, you need to manually start the required services.
Test Setup
The OpenReview API V1, OpenReview API V2, and OpenReview Web frontend must be cloned and configured to run on ports 3000, 3001, and 3030 respectively. For more information on how to install and configure those services see the README for each project:
Install the package with test dependencies:
pip install -e ".[test]"
Download the proper Firefox Selenium driver for your OS from GitHub, and place the geckodriver executable in the directory openreview-py/tests/drivers. When you are done your folder structure should look like this:
├── openreview-py
│ ├── tests
│ │ ├── data
│ │ ├── drivers
│ │ │ └── geckodriver
Running Tests
Start both OpenReview API versions and the web frontend:
Inside the OpenReview API V1 directory
npm run cleanStart
Inside the OpenReview API V2 directory
npm run cleanStart
Inside the OpenReview Web directory
SUPER_USER=openreview.net npm run dev
Once all three services are running, start the tests:
pytest
Note: If you have previously set environment variables with your OpenReview credentials, make sure to clear them before running the tests:
unset OPENREVIEW_USERNAME && unset OPENREVIEW_PASSWORD
To run a single set of tests from a file, you can include the file name as an argument. For example:
pytest tests/test_client.py