Python issue preventing update

While trying to update my pioreactor an error is generated. Based on the log, I think python needs to be updated. Does the pioreactor software use the system python version or does it have a pyenv that can be updated? Log below:

2026-02-19T16:21:35-0500 [tasks] DEBUG Updating app on leader from /tmp/release_26.2.3.zip
2026-02-19T16:21:35-0500 [update_app] DEBUG sudo rm -rf /tmp/release_26.2.3
2026-02-19T16:21:35-0500 [update_app] DEBUG unzip -o /tmp/release_26.2.3.zip -d /tmp/release_26.2.3
2026-02-19T16:21:35-0500 [update_app] DEBUG Archive:  /tmp/release_26.2.3.zip
  inflating: /tmp/release_26.2.3/CHANGELOG.md  
 extracting: /tmp/release_26.2.3/update.sql  
  inflating: /tmp/release_26.2.3/pre_update.sh  
 extracting: /tmp/release_26.2.3/wheels_26.2.3.zip  
  inflating: /tmp/release_26.2.3/pioreactor-26.2.3-py3-none-any.whl  
 extracting: /tmp/release_26.2.3/post_update.sh  
 extracting: /tmp/release_26.2.3/update.sh  

2026-02-19T16:21:35-0500 [update_app] DEBUG unzip -o /tmp/release_26.2.3/wheels_26.2.3.zip -d /tmp/release_26.2.3/wheels
2026-02-19T16:21:35-0500 [update_app] DEBUG Archive:  /tmp/release_26.2.3/wheels_26.2.3.zip
  inflating: /tmp/release_26.2.3/wheels/adafruit_circuitpython_ads1x15-2.2.23-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/itsdangerous-2.2.0-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/jinja2-3.1.4-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/crudini-0.9.5-py2.py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/python_dotenv-1.0.1-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/iniparse-0.5-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/adafruit_circuitpython_connectionmanager-3.1.1-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/packaging-26.0-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/click-8.1.7-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/paho_mqtt-2.1.0-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/typing_extensions-4.15.0-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/msgspec-0.19.0-cp311-cp311-linux_armv7l.whl  
  inflating: /tmp/release_26.2.3/wheels/grpredict-25.6.1-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/MarkupSafe-2.1.5-cp311-cp311-linux_armv7l.whl  
  inflating: /tmp/release_26.2.3/wheels/adafruit_circuitpython_requests-4.1.3-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/packaging-24.1-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/plotext-5.2.8-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/binho_host_adapter-0.1.6-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/colorlog-6.7.0-py2.py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/huey-2.5.2-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/adafruit_platformdetect-3.78.0-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/numpy-2.3.2-cp311-cp311-linux_armv7l.whl  
  inflating: /tmp/release_26.2.3/wheels/Adafruit_PureIO-1.1.11-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/adafruit_blinka-8.58.1-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/pyserial-3.5-py2.py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/six-1.17.0-py2.py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/mcp_utils_msgspec-2.1.0-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/flask-3.1.0-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/sysv_ipc-1.2.0-cp311-cp311-linux_armv7l.whl  
  inflating: /tmp/release_26.2.3/wheels/adafruit_circuitpython_busdevice-5.2.9-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/setuptools-80.10.2-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/pyusb-1.2.1-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/flup6-1.1.1-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/werkzeug-3.1.0-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/pyftdi-0.55.4-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/blinker-1.9.0-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/wheel-0.46.3-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/adafruit_circuitpython_typing-1.10.3-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/rpi_hardware_pwm-0.3.0-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/DAC43608-0.2.7-py3-none-any.whl  
  inflating: /tmp/release_26.2.3/wheels/smbus2-0.5.0-py2.py3-none-any.whl  

2026-02-19T16:21:35-0500 [update_app] DEBUG sudo bash /tmp/release_26.2.3/pre_update.sh
2026-02-19T16:21:35-0500 [update_app] DEBUG Version check passed: 25.9.18

2026-02-19T16:21:35-0500 [update_app] DEBUG sudo pip install --no-index --find-links=/tmp/release_26.2.3/wheels/ /tmp/release_26.2.3/pioreactor-26.2.3-py3-none-any.whl[leader,worker]
2026-02-19T16:21:36-0500 [update_app] DEBUG ERROR: Package 'pioreactor' requires a different Python: 3.11.2 not in '>=3.13'

2026-02-19T16:21:36-0500 [update_app] ERROR Update failed. See logs.

Are you on the latest OS? There was “OS-blocking” update in November 2025, New major Pioreactor software release: 25.11.12 | Pioreactor that required a full rewrite (sadly)

I am not. I’d missed that announcement probably.

@rcphysics, FYI you don’t need to update to specifically 25.11.x. When you make the OS-jump, you can go straight to 26.2.x.