Skip to content

Unable to install on Python 3.13 #970

@132ikl

Description

@132ikl

Hi, I think the latest commit f00ed96 might have broken compatibility for Python 3.13 (cc @Coben-3d). I haven't looked to much into it, but I get this output when trying to install:

$ sudo -u octoprint /opt/octoprint/bin/pip3 install git+https://github.com/FormerLurker/Octolapse
Collecting git+https://github.com/FormerLurker/Octolapse
  Cloning https://github.com/FormerLurker/Octolapse to /tmp/pip-req-build-xl1nmkbl
  Running command git clone --filter=blob:none --quiet https://github.com/FormerLurker/Octolapse /tmp/pip-req-build-xl1nmkbl
  Resolved https://github.com/FormerLurker/Octolapse to commit f00ed96ae0494376fd8d81f571cc9083c5470955
  Preparing metadata (setup.py) ... error
  error: subprocess-exited-with-error
  
  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [5 lines of output]
      /tmp/pip-req-build-xl1nmkbl/versioneer.py:564: SyntaxWarning: invalid escape sequence '\s'
        mo = re.search(r'=\s*"(.*)"', line)
      error in Octolapse setup command: 'install_requires' must be a string or iterable of strings containing valid project/version requirement specifiers; Expected package name at the start of dependency specifier
          .
          ^
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.

[notice] A new release of pip is available: 25.2 -> 25.3
[notice] To update, run: /opt/octoprint/bin/python -m pip install --upgrade pip
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

I am able to install the previous commit (e174a5c) without issue.

Log from successful install
sudo -u octoprint /opt/octoprint/bin/pip3 install git+https://github.com/FormerLurker/Octolapse@e174a5c08d72ea213f7e7052dfe2e9ca9089e424
Collecting git+https://github.com/FormerLurker/Octolapse@e174a5c08d72ea213f7e7052dfe2e9ca9089e424
  Cloning https://github.com/FormerLurker/Octolapse (to revision e174a5c08d72ea213f7e7052dfe2e9ca9089e424) to /tmp/pip-req-build-qylc_swz
  Running command git clone --filter=blob:none --quiet https://github.com/FormerLurker/Octolapse /tmp/pip-req-build-qylc_swz
  Running command git rev-parse -q --verify 'sha^e174a5c08d72ea213f7e7052dfe2e9ca9089e424'
  Running command git fetch -q https://github.com/FormerLurker/Octolapse e174a5c08d72ea213f7e7052dfe2e9ca9089e424
  Running command git checkout -q e174a5c08d72ea213f7e7052dfe2e9ca9089e424
  Resolved https://github.com/FormerLurker/Octolapse to commit e174a5c08d72ea213f7e7052dfe2e9ca9089e424
  Preparing metadata (setup.py) ... done
Collecting pillow<11,>=9.3 (from Octolapse==0.4.5+1.ge174a5c)
  Downloading pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl.metadata (9.2 kB)
Requirement already satisfied: sarge in /opt/octoprint/lib/python3.13/site-packages (from Octolapse==0.4.5+1.ge174a5c) (0.1.7.post1)
Collecting six (from Octolapse==0.4.5+1.ge174a5c)
  Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
Requirement already satisfied: OctoPrint>=1.4.0 in /opt/octoprint/lib/python3.13/site-packages (from Octolapse==0.4.5+1.ge174a5c) (1.11.4)
Requirement already satisfied: psutil in /opt/octoprint/lib/python3.13/site-packages (from Octolapse==0.4.5+1.ge174a5c) (6.1.1)
Collecting file_read_backwards (from Octolapse==0.4.5+1.ge174a5c)
  Downloading file_read_backwards-3.2.0-py2.py3-none-any.whl.metadata (4.3 kB)
Requirement already satisfied: setuptools>=6.0 in /opt/octoprint/lib/python3.13/site-packages (from Octolapse==0.4.5+1.ge174a5c) (80.9.0)
Collecting awesome-slugify<1.7,>=1.6.5 (from Octolapse==0.4.5+1.ge174a5c)
  Downloading awesome-slugify-1.6.5.tar.gz (8.4 kB)
  Preparing metadata (setup.py) ... done
Requirement already satisfied: regex in /opt/octoprint/lib/python3.13/site-packages (from awesome-slugify<1.7,>=1.6.5->Octolapse==0.4.5+1.ge174a5c) (2025.11.3)
Collecting Unidecode<0.05,>=0.04.14 (from awesome-slugify<1.7,>=1.6.5->Octolapse==0.4.5+1.ge174a5c)
  Downloading Unidecode-0.04.21-py2.py3-none-any.whl.metadata (7.0 kB)
Requirement already satisfied: OctoPrint-FileCheck>=2024.11.12 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2025.7.23)
Requirement already satisfied: OctoPrint-FirmwareCheck>=2025.5.14 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2025.7.23)
Requirement already satisfied: OctoPrint-PiSupport>=2023.10.10 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2025.7.23)
Requirement already satisfied: argon2-cffi>=23.1.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (25.1.0)
Requirement already satisfied: Babel<2.17,>=2.16 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.16.0)
Requirement already satisfied: cachelib<0.14,>=0.13.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (0.13.0)
Requirement already satisfied: Click!=8.2.0,<8.3,>=8.1.8 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (8.2.1)
Requirement already satisfied: colorlog<7,>=6.9.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (6.10.1)
Requirement already satisfied: emoji<3,>=2.14.1 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.15.0)
Requirement already satisfied: feedparser<7,>=6.0.11 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (6.0.12)
Requirement already satisfied: filetype<2,>=1.2.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (1.2.0)
Requirement already satisfied: Flask-Assets<3,>=2.1.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.1.0)
Requirement already satisfied: Flask-Babel<5,>=4.0.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (4.0.0)
Requirement already satisfied: Flask-Login<0.7,>=0.6.3 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (0.6.3)
Requirement already satisfied: Flask-Limiter<3.9,>=3.8 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (3.8.0)
Requirement already satisfied: flask<3.1,>=3.0.3 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (3.0.3)
Requirement already satisfied: frozendict<3,>=2.4.6 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.4.6)
Requirement already satisfied: limits<5 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (4.8.0)
Requirement already satisfied: markdown<3.8,>=3.7 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (3.7)
Requirement already satisfied: netaddr<1.4,>=1.3.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (1.3.0)
Requirement already satisfied: netifaces<0.12,>=0.11.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (0.11.0)
Requirement already satisfied: packaging in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (24.2)
Requirement already satisfied: libpass<2,>=1.8.1 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (1.9.3)
Requirement already satisfied: pathvalidate<4,>=3.2.1 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (3.3.1)
Requirement already satisfied: pydantic<3,>=2.10.6 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.12.4)
Requirement already satisfied: pylru<2,>=1.2.1 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (1.2.1)
Requirement already satisfied: pyserial<4,>=3.5 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (3.5)
Requirement already satisfied: pytz in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2025.2)
Requirement already satisfied: PyYAML<7,>=6.0.2 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (6.0.3)
Requirement already satisfied: requests<3,>=2.32.3 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.32.5)
Requirement already satisfied: semantic_version<3,>=2.10.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.10.0)
Requirement already satisfied: sentry-sdk<3,>=2.20.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.44.0)
Requirement already satisfied: tornado<6.6,>=6.5 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (6.5.2)
Requirement already satisfied: watchdog<5,>=4.0.2 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (4.0.2)
Requirement already satisfied: websocket-client<1.9,>=1.8.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (1.8.0)
Requirement already satisfied: werkzeug<3.1,>=3.0.6 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (3.0.6)
Requirement already satisfied: wrapt<1.18,>=1.17.2 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (1.17.3)
Requirement already satisfied: zeroconf<0.137,>=0.136.2 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (0.136.2)
Requirement already satisfied: zipstream-ng<2.0.0,>=1.8.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (1.9.0)
Requirement already satisfied: blinker<1.9.0,>=1.8.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (1.8.2)
Requirement already satisfied: more-itertools>=10.5.0 in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (10.8.0)
Requirement already satisfied: future in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (1.0.0)
Requirement already satisfied: wheel in /opt/octoprint/lib/python3.13/site-packages (from OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (0.45.1)
Requirement already satisfied: sgmllib3k in /opt/octoprint/lib/python3.13/site-packages (from feedparser<7,>=6.0.11->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (1.0.0)
Requirement already satisfied: Jinja2>=3.1.2 in /opt/octoprint/lib/python3.13/site-packages (from flask<3.1,>=3.0.3->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (3.1.6)
Requirement already satisfied: itsdangerous>=2.1.2 in /opt/octoprint/lib/python3.13/site-packages (from flask<3.1,>=3.0.3->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.2.0)
Requirement already satisfied: webassets>=2.0 in /opt/octoprint/lib/python3.13/site-packages (from Flask-Assets<3,>=2.1.0->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (3.0.0)
Requirement already satisfied: ordered-set<5,>4 in /opt/octoprint/lib/python3.13/site-packages (from Flask-Limiter<3.9,>=3.8->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (4.1.0)
Requirement already satisfied: rich<14,>=12 in /opt/octoprint/lib/python3.13/site-packages (from Flask-Limiter<3.9,>=3.8->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (13.9.4)
Requirement already satisfied: typing-extensions>=4 in /opt/octoprint/lib/python3.13/site-packages (from Flask-Limiter<3.9,>=3.8->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (4.15.0)
Requirement already satisfied: deprecated>=1.2 in /opt/octoprint/lib/python3.13/site-packages (from limits<5->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (1.3.1)
Requirement already satisfied: annotated-types>=0.6.0 in /opt/octoprint/lib/python3.13/site-packages (from pydantic<3,>=2.10.6->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (0.7.0)
Requirement already satisfied: pydantic-core==2.41.5 in /opt/octoprint/lib/python3.13/site-packages (from pydantic<3,>=2.10.6->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.41.5)
Requirement already satisfied: typing-inspection>=0.4.2 in /opt/octoprint/lib/python3.13/site-packages (from pydantic<3,>=2.10.6->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (0.4.2)
Requirement already satisfied: charset_normalizer<4,>=2 in /opt/octoprint/lib/python3.13/site-packages (from requests<3,>=2.32.3->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (3.4.4)
Requirement already satisfied: idna<4,>=2.5 in /opt/octoprint/lib/python3.13/site-packages (from requests<3,>=2.32.3->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (3.11)
Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/octoprint/lib/python3.13/site-packages (from requests<3,>=2.32.3->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.5.0)
Requirement already satisfied: certifi>=2017.4.17 in /opt/octoprint/lib/python3.13/site-packages (from requests<3,>=2.32.3->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2025.10.5)
Requirement already satisfied: markdown-it-py>=2.2.0 in /opt/octoprint/lib/python3.13/site-packages (from rich<14,>=12->Flask-Limiter<3.9,>=3.8->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (4.0.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /opt/octoprint/lib/python3.13/site-packages (from rich<14,>=12->Flask-Limiter<3.9,>=3.8->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.19.2)
Requirement already satisfied: MarkupSafe>=2.1.1 in /opt/octoprint/lib/python3.13/site-packages (from werkzeug<3.1,>=3.0.6->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (3.0.3)
Requirement already satisfied: ifaddr>=0.1.7 in /opt/octoprint/lib/python3.13/site-packages (from zeroconf<0.137,>=0.136.2->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (0.2.0)
Requirement already satisfied: argon2-cffi-bindings in /opt/octoprint/lib/python3.13/site-packages (from argon2-cffi>=23.1.0->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (25.1.0)
Requirement already satisfied: mdurl~=0.1 in /opt/octoprint/lib/python3.13/site-packages (from markdown-it-py>=2.2.0->rich<14,>=12->Flask-Limiter<3.9,>=3.8->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (0.1.2)
Requirement already satisfied: zope-dottedname>=6.0 in /opt/octoprint/lib/python3.13/site-packages (from webassets>=2.0->Flask-Assets<3,>=2.1.0->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (7.0)
Requirement already satisfied: cffi>=1.0.1 in /opt/octoprint/lib/python3.13/site-packages (from argon2-cffi-bindings->argon2-cffi>=23.1.0->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.0.0)
Requirement already satisfied: pycparser in /opt/octoprint/lib/python3.13/site-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi>=23.1.0->OctoPrint>=1.4.0->Octolapse==0.4.5+1.ge174a5c) (2.23)
Downloading pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl (4.4 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.4/4.4 MB 2.9 MB/s  0:00:01
Downloading Unidecode-0.04.21-py2.py3-none-any.whl (228 kB)
Downloading file_read_backwards-3.2.0-py2.py3-none-any.whl (7.9 kB)
Downloading six-1.17.0-py2.py3-none-any.whl (11 kB)
Building wheels for collected packages: Octolapse, awesome-slugify
  DEPRECATION: Building 'Octolapse' using the legacy setup.py bdist_wheel mechanism, which will be removed in a future version. pip 25.3 will enforce this behaviour change. A possible replacement is to use the standardized build interface by setting the `--use-pep517` option, (possibly combined with `--no-build-isolation`), or adding a `pyproject.toml` file to the source tree of 'Octolapse'. Discussion can be found at https://github.com/pypa/pip/issues/6334
  Building wheel for Octolapse (setup.py) ... done
  Created wheel for Octolapse: filename=octolapse-0.4.5+1.ge174a5c-cp313-cp313-linux_aarch64.whl size=3088450 sha256=df8bdc25d9486b66cc32b6f27b4ae2a0f7145a2fa4502fe90c3ab299ac7a113a
  Stored in directory: /var/lib/octoprint/.cache/pip/wheels/82/23/da/89e8205ce5688eccda8cd654e4265e3e02e4e757a0658a8420
  DEPRECATION: Building 'awesome-slugify' using the legacy setup.py bdist_wheel mechanism, which will be removed in a future version. pip 25.3 will enforce this behaviour change. A possible replacement is to use the standardized build interface by setting the `--use-pep517` option, (possibly combined with `--no-build-isolation`), or adding a `pyproject.toml` file to the source tree of 'awesome-slugify'. Discussion can be found at https://github.com/pypa/pip/issues/6334
  Building wheel for awesome-slugify (setup.py) ... done
  Created wheel for awesome-slugify: filename=awesome_slugify-1.6.5-py3-none-any.whl size=8380 sha256=122feb9b6a53c3352fa5d88499e30f78540261ad43ec3ad5726e5b36087830f6
  Stored in directory: /var/lib/octoprint/.cache/pip/wheels/f6/8d/90/0b26ee7a2a7b6e3bc44fc33dd6a9be2bf9ddc0530969e8460c
Successfully built Octolapse awesome-slugify
Installing collected packages: Unidecode, file_read_backwards, six, pillow, awesome-slugify, Octolapse
  Attempting uninstall: Unidecode
    Found existing installation: Unidecode 1.4.0
    Uninstalling Unidecode-1.4.0:
      Successfully uninstalled Unidecode-1.4.0
Successfully installed Octolapse-0.4.5+1.ge174a5c Unidecode-0.4.21 awesome-slugify-1.6.5 file_read_backwards-3.2.0 pillow-10.4.0 six-1.17.0

[notice] A new release of pip is available: 25.2 -> 25.3
[notice] To update, run: /opt/octoprint/bin/python -m pip install --upgrade pip

Python version: 3.13.7
OS: Arch Linux ARM (aarch64)

/opt/octoprint/bin/python --version
Python 3.13.7

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions