lower the python floor to 3.12

Fixes #26.

`requires-python` was `>=3.14`. On anything older poetry declines to create an
environment, and it says so on stderr while leaving stdout empty. The README
tells the user to run `iex (poetry env activate)`, `iex` only sees stdout, and
PowerShell reports

    Invoke-Expression : Cannot bind argument to parameter 'Command' because it
    is null.

which points at `iex` rather than at the install that never happened. The
first reply on the issue guessed the reporter was missing `iex`, which is a
built-in alias, so the error is actively misleading.

3.14 looks stricter than anything the code needs. Every file in src/ compiles
on 3.10, no 3.13 or 3.14 only syntax appears anywhere in the tree, and the
full task set was run end to end on 3.12.10 against a live account with all
six tasks completing. The dependency graph agrees: numpy is the highest floor
in the lock at >=3.12, so 3.12 is where the real constraint sits.

Verified after the change on 3.12.10: `poetry install` creates the
environment, `poetry env activate` emits a real activation command instead of
nothing, `iex (poetry env activate)` activates in PowerShell, and every
dependency plus every module under src/ imports.

The lock is regenerated rather than left stale, since `requires-python` feeds
its content hash. The only substantive change is a typing_extensions marker
for python_version < 3.13; the package set is unchanged at 203. Regenerated
with poetry 2.4.1 to match the version that wrote the existing file.

The README gains the version bump and a short note on the failure, so anyone
who hits it while running an older Python can recognise it.
This commit is contained in:
Ethan Stoner
2026-08-26 12:18:09 -07:00
parent e2a06275f3
commit e3a15aa9cd
3 changed files with 7 additions and 4 deletions
+3 -1
View File
@@ -24,7 +24,9 @@ You should also have an Ollama account created (for the LLM), the `ollama` tool
You must also provide an image for the script to upload to complete the visual search task. Currently, this image is named `keypress_times.png` and is located in the root directory of the project (yes, I used a random image from my keyboard analysis to do this). You may provide an image of your own, just ensure that the absolute path of the image is placed in the `VISUAL_SEARCH_IMAGE_PATH` constant at the top of `rewards_tasks.py`. You must also provide an image for the script to upload to complete the visual search task. Currently, this image is named `keypress_times.png` and is located in the root directory of the project (yes, I used a random image from my keyboard analysis to do this). You may provide an image of your own, just ensure that the absolute path of the image is placed in the `VISUAL_SEARCH_IMAGE_PATH` constant at the top of `rewards_tasks.py`.
Activate the virtual environment & install dependencies (you may have to use `python -m poetry` instead of `poetry`). Activate the virtual environment & install dependencies (you may have to use `python -m poetry` instead of `poetry`).
You must have Python 3.14+ and Poetry installed. You must have Python 3.12+ and Poetry installed.
If `iex (poetry env activate)` fails with *"Cannot bind argument to parameter 'Command' because it is null"*, `poetry install` did not create an environment. Run `python --version` first: an older Python leaves poetry with nothing to activate, and the message explaining that goes to stderr rather than into `iex`.
Windows (PowerShell) Windows (PowerShell)
```sh ```sh
Generated
+3 -2
View File
@@ -26,6 +26,7 @@ files = [
[package.dependencies] [package.dependencies]
idna = ">=2.8" idna = ">=2.8"
typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""}
[package.extras] [package.extras]
trio = ["trio (>=0.32.0)"] trio = ["trio (>=0.32.0)"]
@@ -5043,5 +5044,5 @@ h11 = ">=0.16.0,<1"
[metadata] [metadata]
lock-version = "2.1" lock-version = "2.1"
python-versions = ">=3.14" python-versions = ">=3.12"
content-hash = "bea6193c41f407cdf51a6cb49dbc4c9ebd63b5e4bdf8ccc3be13cf218ff6f376" content-hash = "fd4eaf67a2a0849a8ce66dfd1ac2be20276da3d8a1454ef9d991214912a51d61"
+1 -1
View File
@@ -6,7 +6,7 @@ authors = [
{name = "Carl Furtado",email = "user0332@duck.com"} {name = "Carl Furtado",email = "user0332@duck.com"}
] ]
license = "MIT" license = "MIT"
requires-python = ">=3.14" requires-python = ">=3.12"
dependencies = [ dependencies = [
"selenium (>=4.46.0,<5.0.0)", "selenium (>=4.46.0,<5.0.0)",
"matplotlib (>=3.11.1,<4.0.0)", "matplotlib (>=3.11.1,<4.0.0)",