From 0faa9e8865d28e2aef4303b6089d461bc3f87b40 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Tue, 4 Mar 2025 14:16:09 -0800 Subject: [PATCH] Chore: Split out some items into extras (#9297) --- .github/workflows/ci.yml | 2 +- Dockerfile | 5 +---- docs/setup.md | 6 ++++++ pyproject.toml | 17 ++++++++++++----- uv.lock | 36 +++++++++++++++++++++++------------- 5 files changed, 43 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c24678bf2..60c84162e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -522,7 +522,7 @@ jobs: - name: Generate requirements file run: | - uv export --quiet --no-dev --format requirements-txt --output-file requirements.txt + uv export --quiet --no-dev --all-extras --format requirements-txt --output-file requirements.txt - name: Compile messages run: | diff --git a/Dockerfile b/Dockerfile index 10fbab8e0..e64f1708c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -205,9 +205,6 @@ COPY --chown=1000:1000 ["pyproject.toml", "uv.lock", "/usr/src/paperless/src/"] # dependencies ARG BUILD_PACKAGES="\ build-essential \ - git \ - # https://www.psycopg.org/docs/install.html#prerequisites - libpq-dev \ # https://github.com/PyMySQL/mysqlclient#linux default-libmysqlclient-dev \ pkg-config" @@ -219,7 +216,7 @@ RUN --mount=type=cache,target=${UV_CACHE_DIR},id=python-cache \ && apt-get update \ && apt-get install --yes --quiet --no-install-recommends ${BUILD_PACKAGES} \ && echo "Installing Python requirements" \ - && uv export --quiet --no-dev --format requirements-txt --output-file requirements.txt \ + && uv export --quiet --no-dev --all-extras --format requirements-txt --output-file requirements.txt \ && uv pip install --system --no-python-downloads --python-preference system --requirements requirements.txt \ && echo "Installing NLTK data" \ && python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/share/nltk_data" snowball_data \ diff --git a/docs/setup.md b/docs/setup.md index 55b52e387..75754766e 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -380,6 +380,12 @@ are released, dependency support is confirmed, etc. dependencies. This is an alternative to the above and may require adjusting the example scripts to utilize the virtual environment paths + !!! tip + + If you use modern Python tooling, such as `uv`, installation will not include + dependencies for Postgres or Mariadb. You can select those extras with `--extra ` + or all with `--all-extras` + 9. Go to `/opt/paperless/src`, and execute the following commands: ```bash diff --git a/pyproject.toml b/pyproject.toml index 291033c13..d26d05aa3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,20 +42,15 @@ dependencies = [ "filelock~=3.17.0", "flower~=2.0.1", "gotenberg-client~=0.9.0", - "granian~=1.7.6", "httpx-oauth~=0.16", "imap-tools~=1.10.0", "inotifyrecursive~=0.3", "jinja2~=3.1.5", "langdetect~=1.0.9", - "mysqlclient~=2.2.7", "nltk~=3.9.1", "ocrmypdf~=16.9.0", "pathvalidate~=3.2.3", "pdf2image~=1.17.0", - "psycopg[c]==3.2.4", - # Direct dependency for proper resolution of the pre-build wheels - "psycopg-c==3.2.4", "python-dateutil~=2.9.0", "python-dotenv~=1.0.1", "python-gnupg~=0.5.4", @@ -74,6 +69,18 @@ dependencies = [ "zxing-cpp~=2.3.0", ] +optional-dependencies.mariadb = [ + "mysqlclient~=2.2.7", +] +optional-dependencies.postgres = [ + "psycopg[c]==3.2.4", + # Direct dependency for proper resolution of the pre-built wheels + "psycopg-c==3.2.4", +] +optional-dependencies.webserver = [ + "granian~=1.7.6", +] + [dependency-groups] dev = [ diff --git a/uv.lock b/uv.lock index 61fa6f255..d4b0a45d4 100644 --- a/uv.lock +++ b/uv.lock @@ -1,4 +1,5 @@ version = 1 +revision = 1 requires-python = ">=3.10" resolution-markers = [ "sys_platform == 'darwin'", @@ -1840,7 +1841,7 @@ wheels = [ [[package]] name = "paperless-ngx" -version = "0.1.0" +version = "2.14.7" source = { virtual = "." } dependencies = [ { name = "bleach", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, @@ -1868,21 +1869,15 @@ dependencies = [ { name = "filelock", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "flower", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "gotenberg-client", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "granian", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "httpx-oauth", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "imap-tools", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "inotifyrecursive", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "jinja2", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "langdetect", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "mysqlclient", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "nltk", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "ocrmypdf", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "pathvalidate", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "pdf2image", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "psycopg", extra = ["c"], marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "psycopg-c", version = "3.2.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version != '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux') or (python_full_version != '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "psycopg-c", version = "3.2.4", source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_aarch64.whl" }, marker = "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "psycopg-c", version = "3.2.4", source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_x86_64.whl" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "python-dateutil", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "python-dotenv", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "python-gnupg", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, @@ -1903,6 +1898,20 @@ dependencies = [ { name = "zxing-cpp", version = "2.3.0", source = { url = "https://github.com/paperless-ngx/builder/releases/download/zxing-2.3.0/zxing_cpp-2.3.0-cp312-cp312-linux_x86_64.whl" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] +[package.optional-dependencies] +mariadb = [ + { name = "mysqlclient", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, +] +postgres = [ + { name = "psycopg", extra = ["c"], marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, + { name = "psycopg-c", version = "3.2.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version != '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux') or (python_full_version != '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "psycopg-c", version = "3.2.4", source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_aarch64.whl" }, marker = "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'" }, + { name = "psycopg-c", version = "3.2.4", source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_x86_64.whl" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, +] +webserver = [ + { name = "granian", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, +] + [package.dev-dependencies] dev = [ { name = "daphne", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, @@ -1990,21 +1999,21 @@ requires-dist = [ { name = "filelock", specifier = "~=3.17.0" }, { name = "flower", specifier = "~=2.0.1" }, { name = "gotenberg-client", specifier = "~=0.9.0" }, - { name = "granian", specifier = "~=1.7.6" }, + { name = "granian", marker = "extra == 'webserver'", specifier = "~=1.7.6" }, { name = "httpx-oauth", specifier = "~=0.16" }, { name = "imap-tools", specifier = "~=1.10.0" }, { name = "inotifyrecursive", specifier = "~=0.3" }, { name = "jinja2", specifier = "~=3.1.5" }, { name = "langdetect", specifier = "~=1.0.9" }, - { name = "mysqlclient", specifier = "~=2.2.7" }, + { name = "mysqlclient", marker = "extra == 'mariadb'", specifier = "~=2.2.7" }, { name = "nltk", specifier = "~=3.9.1" }, { name = "ocrmypdf", specifier = "~=16.9.0" }, { name = "pathvalidate", specifier = "~=3.2.3" }, { name = "pdf2image", specifier = "~=1.17.0" }, - { name = "psycopg", extras = ["c"], specifier = "==3.2.4" }, - { name = "psycopg-c", marker = "(python_full_version != '3.12.*' and platform_machine == 'aarch64') or (python_full_version != '3.12.*' and platform_machine == 'x86_64') or (platform_machine != 'aarch64' and platform_machine != 'x86_64') or sys_platform != 'linux'", specifier = "==3.2.4" }, - { name = "psycopg-c", marker = "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_aarch64.whl" }, - { name = "psycopg-c", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_x86_64.whl" }, + { name = "psycopg", extras = ["c"], marker = "extra == 'postgres'", specifier = "==3.2.4" }, + { name = "psycopg-c", marker = "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'postgres'", url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_aarch64.whl" }, + { name = "psycopg-c", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'postgres'", url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_x86_64.whl" }, + { name = "psycopg-c", marker = "(python_full_version != '3.12.*' and platform_machine == 'aarch64' and extra == 'postgres') or (python_full_version != '3.12.*' and platform_machine == 'x86_64' and extra == 'postgres') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'postgres') or (sys_platform != 'linux' and extra == 'postgres')", specifier = "==3.2.4" }, { name = "python-dateutil", specifier = "~=2.9.0" }, { name = "python-dotenv", specifier = "~=1.0.1" }, { name = "python-gnupg", specifier = "~=0.5.4" }, @@ -2024,6 +2033,7 @@ requires-dist = [ { name = "zxing-cpp", marker = "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", url = "https://github.com/paperless-ngx/builder/releases/download/zxing-2.3.0/zxing_cpp-2.3.0-cp312-cp312-linux_aarch64.whl" }, { name = "zxing-cpp", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", url = "https://github.com/paperless-ngx/builder/releases/download/zxing-2.3.0/zxing_cpp-2.3.0-cp312-cp312-linux_x86_64.whl" }, ] +provides-extras = ["mariadb", "postgres", "webserver"] [package.metadata.requires-dev] dev = [