aider icon indicating copy to clipboard operation
aider copied to clipboard

Python 3.13 support

Open paul-gauthier opened this issue 10 months ago • 13 comments

Aider must run with python 3.9 - 3.12. It won't run with python 3.13.

That said, there are very easy ways for python3.13 users to install aider. These methods will quickly and seamlessly install aider, python3.12 and all needed dependencies in an isolated environment.

With aider-install

If you have any python 3.8+ including python 3.13, you can use aider-install to install aider, python3.12 and all needed dependencies in an isolated environment.

python -m pip install aider-install
aider-install

One-liners

These one-liners will install aider, along with python 3.12 if needed. They are based on the uv installers.

Windows

powershell -ExecutionPolicy ByPass -c "irm https://aider.chat/install.ps1 | iex"

Mac & Linux

Use curl to download the script and execute it with sh:

curl -LsSf https://aider.chat/install.sh | sh

If your system doesn't have curl, you can use wget:

wget -qO- https://aider.chat/install.sh | sh

Install with uv

You can install aider with uv:

python -m pip install uv  # If you need to install uv
uv tool install --force --python python3.12 aider-chat@latest

This will install uv using your existing python version 3.8-3.13, and use it to install aider. If needed, uv will automatically install a separate python 3.12 to use with aider.

Also see the install docs.

paul-gauthier avatar Jan 28 '25 00:01 paul-gauthier

how long will python 3.12 be mantained for? it's going to be outdated somewhen

Kreijstal avatar Jan 28 '25 05:01 Kreijstal

What's the issue causing python 3.13 to be unsupported by aider?

diogovalada avatar Feb 15 '25 18:02 diogovalada

When I install aider with Python 3.13, below is error, please upgrade aider to support Python 3.13, thanks.

sudo pip3 install --upgrade aider-chat --break
Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
Requirement already satisfied: aider-chat in /usr/lib/python3.13/site-packages (0.16.0)
Collecting aiohttp==3.8.4 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/c2/fd/1ff4da09ca29d8933fda3f3514980357e25419ce5e0f689041edb8f17dab/aiohttp-3.8.4.tar.gz (7.3 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting aiosignal==1.3.1 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/76/ac/a7305707cb852b7e16ff80eaf5692309bde30e2b1100a1fcacdc8f731d97/aiosignal-1.3.1-py3-none-any.whl (7.6 kB)
Collecting async-timeout==4.0.2 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/d6/c1/8991e7c5385b897b8c020cdaad718c5b087a6626d1d11a23e1ea87e325a7/async_timeout-4.0.2-py3-none-any.whl (5.8 kB)
Collecting attrs==23.1.0 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/f0/eb/fcb708c7bf5056045e9e98f62b93bd7467eb718b0202e7698eb11d66416c/attrs-23.1.0-py3-none-any.whl (61 kB)
Collecting certifi==2023.5.7 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/9d/19/59961b522e6757f0c9097e4493fa906031b95b3ebe9360b2c3083561a6b4/certifi-2023.5.7-py3-none-any.whl (156 kB)
Collecting charset-normalizer==3.1.0 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/ef/81/14b3b8f01ddaddad6cdec97f2f599aa2fa466bd5ee9af99b08b7713ccd29/charset_normalizer-3.1.0-py3-none-any.whl (46 kB)
Collecting frozenlist==1.3.3 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/e9/10/d629476346112b85c912527b9080944fd2c39a816c2225413dbc0bb6fcc0/frozenlist-1.3.3.tar.gz (66 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting gitdb==4.0.10 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/21/a6/35f83efec687615c711fe0a09b67e58f6d1254db27b1013119de46f450bd/gitdb-4.0.10-py3-none-any.whl (62 kB)
Collecting GitPython==3.1.31 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/9e/8a/d1e02cc111d65b0346f70abb83c51f8593e7134bf694a4a56d1a470caaf7/GitPython-3.1.31-py3-none-any.whl (184 kB)
Collecting idna==3.4 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl (61 kB)
Requirement already satisfied: markdown-it-py==2.2.0 in /usr/lib/python3.13/site-packages (from aider-chat) (2.2.0)
Requirement already satisfied: mdurl==0.1.2 in /usr/lib/python3.13/site-packages (from aider-chat) (0.1.2)
Collecting multidict==6.0.4 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/4a/15/bd620f7a6eb9aa5112c4ef93e7031bcd071e0611763d8e17706ef8ba65e0/multidict-6.0.4.tar.gz (51 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting openai==0.27.6 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/9f/87/838149e472c58a141fa81e2eb4cc8828cb134054b59d67637031985ca770/openai-0.27.6-py3-none-any.whl (71 kB)
Collecting prompt-toolkit==3.0.38 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/87/3f/1f5a0ff475ae6481f4b0d45d4d911824d3218b94ee2a97a8cb84e5569836/prompt_toolkit-3.0.38-py3-none-any.whl (385 kB)
Collecting Pygments==2.15.1 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/34/a7/37c8d68532ba71549db4212cb036dbd6161b40e463aba336770e80c72f84/Pygments-2.15.1-py3-none-any.whl (1.1 MB)
Collecting requests==2.30.0 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/96/80/034ffeca15c0f4e01b7b9c6ad0fb704b44e190cde4e757edbd60be404c41/requests-2.30.0-py3-none-any.whl (62 kB)
Requirement already satisfied: rich==13.3.5 in /usr/lib/python3.13/site-packages (from aider-chat) (13.3.5)
Collecting smmap==5.0.0 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/6d/01/7caa71608bc29952ae09b0be63a539e50d2484bc37747797a66a60679856/smmap-5.0.0-py3-none-any.whl (24 kB)
Collecting tqdm==4.65.0 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/e6/02/a2cff6306177ae6bc73bc0665065de51dfb3b9db7373e122e2735faf0d97/tqdm-4.65.0-py3-none-any.whl (77 kB)
Collecting urllib3==2.0.2 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/4b/1d/f8383ef593114755429c307449e7717b87044b3bcd5f7860b89b1f759e34/urllib3-2.0.2-py3-none-any.whl (123 kB)
Collecting wcwidth==0.2.6 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/20/f4/c0584a25144ce20bfcf1aecd041768b8c762c1eb0aa77502a3f0baa83f11/wcwidth-0.2.6-py2.py3-none-any.whl (29 kB)
Collecting yarl==1.9.2 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/5f/3f/04b3c5e57844fb9c034b09c5cb6d2b43de5d64a093c30529fd233e16cf09/yarl-1.9.2.tar.gz (184 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting pytest==7.3.1 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/1b/d1/72df649a705af1e3a09ffe14b0c7d3be1fd730da6b98beb4a2ed26b8a023/pytest-7.3.1-py3-none-any.whl (320 kB)
Collecting tiktoken==0.4.0 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/9f/88/77a86f915a81449156375b7538c94105a34bebf00838462c9d3fced490e9/tiktoken-0.4.0.tar.gz (25 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: configargparse in /usr/lib/python3.13/site-packages (from aider-chat) (1.7)
Requirement already satisfied: PyYAML in /usr/lib/python3.13/site-packages (from aider-chat) (6.0.2)
Requirement already satisfied: backoff==2.2.1 in /usr/lib/python3.13/site-packages (from aider-chat) (2.2.1)
Collecting networkx==3.1 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/a8/05/9d4f9b78ead6b2661d6e8ea772e111fc4a9fbd866ad0c81906c11206b55e/networkx-3.1-py3-none-any.whl (2.1 MB)
Collecting diskcache==5.6.1 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/1c/87/5f5efc3606766a8a1621fecb8b8ca2111d1dad4b9b8a631579f070d47939/diskcache-5.6.1-py3-none-any.whl (45 kB)
Collecting numpy==1.24.3 (from aider-chat)
  Using cached https://mirrors.aliyun.com/pypi/packages/2c/d4/590ae7df5044465cc9fa2db152ae12468694d62d952b1528ecff328ef7fc/numpy-1.24.3.tar.gz (10.9 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  error: subprocess-exited-with-error
  
  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [32 lines of output]
      Traceback (most recent call last):
        File "/usr/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 389, in <module>
          main()
          ~~~~^^
        File "/usr/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 373, in main
          json_out["return_val"] = hook(**hook_input["kwargs"])
                                   ~~~~^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 137, in get_requires_for_build_wheel
          backend = _build_backend()
        File "/usr/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 70, in _build_backend
          obj = import_module(mod_path)
        File "/usr/lib/python3.13/importlib/__init__.py", line 88, in import_module
          return _bootstrap._gcd_import(name[level:], package, level)
                 ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
        File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
        File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
        File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
        File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
        File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
        File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
        File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
        File "<frozen importlib._bootstrap_external>", line 1026, in exec_module
        File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
        File "/tmp/pip-build-env-g621rd4o/overlay/lib/python3.13/site-packages/setuptools/__init__.py", line 16, in <module>
          import setuptools.version
        File "/tmp/pip-build-env-g621rd4o/overlay/lib/python3.13/site-packages/setuptools/version.py", line 1, in <module>
          import pkg_resources
        File "/tmp/pip-build-env-g621rd4o/overlay/lib/python3.13/site-packages/pkg_resources/__init__.py", line 2172, in <module>
          register_finder(pkgutil.ImpImporter, find_on_path)
                          ^^^^^^^^^^^^^^^^^^^
      AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

manateelazycat avatar Feb 16 '25 01:02 manateelazycat

@manateelazycat why not use one of the recommended install methods described above?

paul-gauthier avatar Feb 16 '25 14:02 paul-gauthier

why user must be use uv?

why aider can not support python 3.13 ?

aider is python project, most people use pip

manateelazycat avatar Feb 16 '25 22:02 manateelazycat

why user must be use uv?

why aider can not support python 3.13 ?

aider is python project, most people use pip

Many projects get broken in new versions of python. It's normal. As Paul said, you can seamlessly install Aider with:

pip install aider-install
aider-install

Yes, it uses uv internally, but there's no problem with that. In fact, it's pip that's at fault for not providing a way to install tools in a isolated manner, like pipx or uv allow. You will miss nothing. You can still use whatever version of python you wish on your python repository, and aider uses it's own version. To you it should be seamless.

diogovalada avatar Feb 17 '25 14:02 diogovalada

I'm labeling this issue as stale because it has been open for 2 weeks with no activity. If there are no additional comments, I will close it in 7 days.

Note: A bot script made these updates to the issue.

github-actions[bot] avatar Mar 04 '25 00:03 github-actions[bot]

Before this story becomes completely stale, do we know what's the biggest blocker to get to py 3.13?

MatthewZMD avatar Mar 04 '25 01:03 MatthewZMD

Before this story becomes completely stale, do we know what's the biggest blocker to get to py 3.13?

dependencies, mostly tree-sitter

Kreijstal avatar Mar 04 '25 05:03 Kreijstal

Tangentially related to the matter: dev installation (with uv sync) does not work as contourpy (a dev only dependency) dropped support for python 3.9 some time ago.

UV says

  ╰─▶ Because the requested Python version (>=3.9, <3.13) does not satisfy Python>=3.10 and contourpy==1.3.1 depends on Python>=3.10, we can conclude that contourpy==1.3.1
      cannot be used.
      And because aider-chat[dev] depends on contourpy==1.3.1 and your project requires aider-chat[dev], we can conclude that your project's requirements are unsatisfiable.

      hint: The `requires-python` value (>=3.9, <3.13) includes Python versions that are not supported by your dependencies (e.g., contourpy==1.3.1 only supports >=3.10).
      Consider using a more restrictive `requires-python` value (like >=3.10).

3.9 just has a few months to live so maybe requires-python for aider can also be bumped to 3.10

alfaix avatar Mar 14 '25 18:03 alfaix

Tangentially related to the matter: dev installation (with uv sync) does not work as contourpy (a dev only dependency) dropped support for python 3.9 some time ago.

UV says

  ╰─▶ Because the requested Python version (>=3.9, <3.13) does not satisfy Python>=3.10 and contourpy==1.3.1 depends on Python>=3.10, we can conclude that contourpy==1.3.1
      cannot be used.
      And because aider-chat[dev] depends on contourpy==1.3.1 and your project requires aider-chat[dev], we can conclude that your project's requirements are unsatisfiable.

      hint: The `requires-python` value (>=3.9, <3.13) includes Python versions that are not supported by your dependencies (e.g., contourpy==1.3.1 only supports >=3.10).
      Consider using a more restrictive `requires-python` value (like >=3.10).

3.9 just has a few months to live so maybe requires-python for aider can also be bumped to 3.10

I was going to post the same thing as I just ran into this. I wonder if this needs to be tracked in its own issue instead of this one tracking 3.13 support?

joshuadavidthomas avatar Mar 31 '25 13:03 joshuadavidthomas

All 454 tests passed on Apple Silicon with a few tricks like dropping Python 3.9 (and Intel Mac) support in requirements, installing scipy manually and waiting for the https://github.com/huggingface/transformers/issues/37326 tag... but I don't know if sentence-transformers 4.0.2 and numpy 2.2.2 are still forbidden according to the comments which were added after the bug https://github.com/UKPLab/sentence-transformers/issues/3256 has been fixed 😅

reneleonhardt avatar Apr 07 '25 12:04 reneleonhardt

With Fedora 42, Ubuntu 25.04 and Debian 13 all having Python 3.13 as default this is going to get a lot more folks complaining in the coming days/weeks.

cavanaug avatar Apr 18 '25 05:04 cavanaug

If it helps anybody, I am not running into any issues using python 3.13.3, aider-chat 0.83.1 and audioop-lts

quantresearch1 avatar May 12 '25 00:05 quantresearch1

I also built it for fedora with 3.13 (except audioop missing), though not tested heavily yet, just very lightly.

juhp avatar May 14 '25 09:05 juhp

This seems to work for me:

uv tool install --python=3.13 --no-cache --reinstall --force --with=google-generativeai --with=audioop-lts aider-chat

fresh2dev avatar Jul 08 '25 22:07 fresh2dev

That's the dependency workaround my PR provided, the essential part is --with=audioop-lts.

reneleonhardt avatar Jul 09 '25 04:07 reneleonhardt

Interestingly, there is no apparent issue with Python 3.13.5 running on an ancient Mac, still on macOS Big Sur (11.7.9, the last supporting Nvidia cards...), and using MacPorts as the Mac-specific package manager (no conflicts with pip or uv whatsoever).

I didn't do anything special (I'm not a Python developer — in fact, I loathe Python 🤣 — therefore I wouldn't even know where to start!): no fancy dockerisation, no containerisation, no virtualisation, no multiple per-project Python installs, nothing: "There Is Just One Python, And Its Name" is 3.13.

There are a gazillion reasons for that, but I'll spare you all of them, except for one: relying on the package manager's carefully fine-tuned One Python To Rule Them All also means to be extra-careful and install all dependent packages, as far as possible, straight from the package manager's repository — as opposed to getting them via pip (or even uv). The reason? It's highly likely that these were patched to conform to a specific setup/environment that the package manager developers had in mind, and they make sure that everything works together flawlessly (or as flawlessly as possible). That, in turn, means zero conflicts — nothing like what was posted on the comments here.

Naturally enough, package manager developers are merely human beings, and, as such, they aren't 'replicating' the whole of pip's massive repositories. That would be impossible. Instead, they focus on the core libraries/packages/modules and rely upon contributors to patch whatever else is required by them. That means that very obscure (but useful!) dependent modules/libraries may be overlooked, and those, naturally enough, require pipor uv to 'fill in the blanks', so to speak.

In my experience, however, the less you rely on language-specific package managers, and the more you rely on the system-wide package manager of your choice, the higher the chance that everything works well together. Believe me, I have gone through several iterations of completely broken and useless packages spread all over the disk as 'leftovers' from different generations of language-specific package managers, each having their own idea where to place their files... and, of course, not all package managers are designed in the same way, and not all have the same level of careful attention to minute details (it all depends on how compulsive-obsessive the core team is — and how that trait is applied in practice!).

Obviously, I cannot advise anyone to scrap everything on their carefully personalised environment, assembled over years with meticulous care for one's own personal purpose — and start essentially from scratch, with a tabula rasa, pristine new installation of the core OS and a single, well-chosen package manager, and stick to it. That would, of course, be the correct thing to do. It's hardly my own case: every now and then, I still find a stray dynamic library in a hidden corner somewhere... from 2000 or 2001. Really. And it happens more often than you imagine. Fortunately, most software relying on those relics has long ceased to work and has been removed — nevertheless, the garbage from two decades remain, who knows how deep, and it's not going to be the best package manager in the world that will 'fix' that.

That said, I can just relay my experience: aye, aider does work with Python 3.13, but seemingly only under a very controlled environment, with a mostly 'clean' 3.13 system-wide install (in the sense that I don't bother much with it — I don't use Python unless I'm forced to). Why it works so well I cannot tell.

GwynethLlewelyn avatar Jul 29 '25 10:07 GwynethLlewelyn

Standard Fedora 42 install broken.

$ pip install -U aider-chat
Defaulting to user installation because normal site-packages is not writeable
Collecting aider-chat
  Using cached aider_chat-0.16.0-py3-none-any.whl.metadata (11 kB)
Collecting aiohttp==3.8.4 (from aider-chat)
  Using cached aiohttp-3.8.4.tar.gz (7.3 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting aiosignal==1.3.1 (from aider-chat)
  Using cached aiosignal-1.3.1-py3-none-any.whl.metadata (4.0 kB)
Collecting async-timeout==4.0.2 (from aider-chat)
  Using cached async_timeout-4.0.2-py3-none-any.whl.metadata (4.2 kB)
Collecting attrs==23.1.0 (from aider-chat)
  Using cached attrs-23.1.0-py3-none-any.whl.metadata (11 kB)
Collecting certifi==2023.5.7 (from aider-chat)
  Using cached certifi-2023.5.7-py3-none-any.whl.metadata (2.2 kB)
Collecting charset-normalizer==3.1.0 (from aider-chat)
  Using cached charset_normalizer-3.1.0-py3-none-any.whl.metadata (30 kB)
Collecting frozenlist==1.3.3 (from aider-chat)
  Using cached frozenlist-1.3.3.tar.gz (66 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting gitdb==4.0.10 (from aider-chat)
  Using cached gitdb-4.0.10-py3-none-any.whl.metadata (1.1 kB)
Collecting GitPython==3.1.31 (from aider-chat)
  Using cached GitPython-3.1.31-py3-none-any.whl.metadata (1.3 kB)
Collecting idna==3.4 (from aider-chat)
  Using cached idna-3.4-py3-none-any.whl.metadata (9.8 kB)
Collecting markdown-it-py==2.2.0 (from aider-chat)
  Using cached markdown_it_py-2.2.0-py3-none-any.whl.metadata (6.8 kB)
Requirement already satisfied: mdurl==0.1.2 in /usr/lib/python3.13/site-packages (from aider-chat) (0.1.2)
Collecting multidict==6.0.4 (from aider-chat)
  Using cached multidict-6.0.4.tar.gz (51 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting openai==0.27.6 (from aider-chat)
  Using cached openai-0.27.6-py3-none-any.whl.metadata (13 kB)
Collecting prompt-toolkit==3.0.38 (from aider-chat)
  Using cached prompt_toolkit-3.0.38-py3-none-any.whl.metadata (7.0 kB)
Collecting Pygments==2.15.1 (from aider-chat)
  Using cached Pygments-2.15.1-py3-none-any.whl.metadata (2.5 kB)
Collecting requests==2.30.0 (from aider-chat)
  Using cached requests-2.30.0-py3-none-any.whl.metadata (4.6 kB)
Collecting rich==13.3.5 (from aider-chat)
  Using cached rich-13.3.5-py3-none-any.whl.metadata (18 kB)
Collecting smmap==5.0.0 (from aider-chat)
  Using cached smmap-5.0.0-py3-none-any.whl.metadata (4.2 kB)
Collecting tqdm==4.65.0 (from aider-chat)
  Using cached tqdm-4.65.0-py3-none-any.whl.metadata (56 kB)
Collecting urllib3==2.0.2 (from aider-chat)
  Using cached urllib3-2.0.2-py3-none-any.whl.metadata (6.6 kB)
Collecting wcwidth==0.2.6 (from aider-chat)
  Using cached wcwidth-0.2.6-py2.py3-none-any.whl.metadata (11 kB)
Collecting yarl==1.9.2 (from aider-chat)
  Using cached yarl-1.9.2.tar.gz (184 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting pytest==7.3.1 (from aider-chat)
  Using cached pytest-7.3.1-py3-none-any.whl.metadata (7.9 kB)
Collecting tiktoken==0.4.0 (from aider-chat)
  Using cached tiktoken-0.4.0.tar.gz (25 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting configargparse (from aider-chat)
  Using cached configargparse-1.7.1-py3-none-any.whl.metadata (24 kB)
Requirement already satisfied: PyYAML in /usr/lib64/python3.13/site-packages (from aider-chat) (6.0.2)
Collecting backoff==2.2.1 (from aider-chat)
  Using cached backoff-2.2.1-py3-none-any.whl.metadata (14 kB)
Collecting networkx==3.1 (from aider-chat)
  Using cached networkx-3.1-py3-none-any.whl.metadata (5.3 kB)
Collecting diskcache==5.6.1 (from aider-chat)
  Using cached diskcache-5.6.1-py3-none-any.whl.metadata (20 kB)
Collecting numpy==1.24.3 (from aider-chat)
  Using cached numpy-1.24.3.tar.gz (10.9 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  error: subprocess-exited-with-error
  
  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [32 lines of output]
      Traceback (most recent call last):
        File "/usr/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
          ~~~~^^
        File "/usr/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ~~~~^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 112, in get_requires_for_build_wheel
          backend = _build_backend()
        File "/usr/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 77, in _build_backend
          obj = import_module(mod_path)
        File "/usr/lib64/python3.13/importlib/__init__.py", line 88, in import_module
          return _bootstrap._gcd_import(name[level:], package, level)
                 ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
        File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
        File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
        File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
        File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
        File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
        File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
        File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
        File "<frozen importlib._bootstrap_external>", line 1026, in exec_module
        File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
        File "/tmp/pip-build-env-mmzlsgfp/overlay/lib/python3.13/site-packages/setuptools/__init__.py", line 16, in <module>
          import setuptools.version
        File "/tmp/pip-build-env-mmzlsgfp/overlay/lib/python3.13/site-packages/setuptools/version.py", line 1, in <module>
          import pkg_resources
        File "/tmp/pip-build-env-mmzlsgfp/overlay/lib/python3.13/site-packages/pkg_resources/__init__.py", line 2172, in <module>
          register_finder(pkgutil.ImpImporter, find_on_path)
                          ^^^^^^^^^^^^^^^^^^^
      AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

jhinrichsen avatar Aug 12 '25 11:08 jhinrichsen

Aider never updates it's dependencies, it's the same on Debian 13.

numpy 1.24.3 is 2 years old and doesn't support Python 3.12 (pkgutil.ImpImporter has been deprecated since Python 3.3 and removed in 3.12). numpy 1.26.0 was the first release to support Python 3.12. numpy 2.1.0 was the first release to support Python 3.13 a year ago. numpy 2.3.2 was the first release to support Python 3.14 a month ago.

Ancient and nested requirements.txt files have been superseded years ago by poetry and uv, and with proper CI you don't even need to pin dependencies unnecessarily.

Without using standards like the cibuildwheel GitHub Action in a simple workflow there will be no binary wheels for all Python versions and architectures, so every user has to build from source. https://github.com/pypa/cibuildwheel#example-setup

To build manylinux, musllinux, macOS, and Windows wheels [for x86 and arm]

With 173 open pull requests and refusal to allow Dependabot and AI review helpers there is no chance for important fixes and improvements from contributors and upstream libraries to reach Aider users.

reneleonhardt avatar Aug 13 '25 15:08 reneleonhardt

Aider never updates it's dependencies, it's the same on Debian 13.

numpy 1.24.3 is 2 years old and doesn't support Python 3.12 (pkgutil.ImpImporter has been deprecated since Python 3.3 and removed in 3.12). numpy 1.26.0 was the first release to support Python 3.12. numpy 2.1.0 was the first release to support Python 3.13 a year ago. numpy 2.3.2 was the first release to support Python 3.14 a month ago.

Ancient and nested requirements.txt files have been superseded years ago by poetry and uv, and with proper CI you don't even need to pin dependencies unnecessarily.

Without using standards like the cibuildwheel GitHub Action in a simple workflow there will be no binary wheels for all Python versions and architectures, so every user has to build from source. https://github.com/pypa/cibuildwheel#example-setup

To build manylinux, musllinux, macOS, and Windows wheels [for x86 and arm]

With 173 open pull requests and refusal to allow Dependabot and AI review helpers there is no chance for important fixes and improvements from contributors and upstream libraries to reach Aider users.

time to vibe code aider with updated dependencies

Kreijstal avatar Aug 13 '25 15:08 Kreijstal

Good luck with that, my hand-coded Python 3.13 PR hasn't even been reviewed, but maybe your AI has a better chance to reach the heart of a human maintainer 👍

reneleonhardt avatar Aug 13 '25 15:08 reneleonhardt

@reneleonhardt https://github.com/dwash96/aider-ce/pull/19 aider finally works with this PR on archlinux (all python dependencies UNPINNED! so python 3.13> WORKS), deepseek was completely broken, but it was fixed... (by deepseek)

Kreijstal avatar Aug 30 '25 10:08 Kreijstal

Wow, awesome work, thank you for all your efforts 🚀

I will never understand why maintainers decide to freeze their dependencies instead of just adapting their code to newer Python versions and let pip choose compatible versions, users suffer everyday because they are not allowed to install even if dependencies have already been updated. You can't stop the world from turning, can you?

"Should You Use Upper Bound Version Constraints?" Spoiler: No. https://iscinumpy.dev/post/bound-version-constraints/

Here we're still fighting for Python 3.13 since January when 3.14 will be released in 5 weeks... I hope Aider will be ready by then.

reneleonhardt avatar Aug 30 '25 15:08 reneleonhardt

Wow, awesome work, thank you for all your efforts 🚀

I will never understand why maintainers decide to freeze their dependencies instead of just adapting their code to newer Python versions and let pip choose compatible versions, users suffer everyday because they are not allowed to install even if dependencies have already been updated. You can't stop the world from turning, can you?

"Should You Use Upper Bound Version Constraints?" Spoiler: No. https://iscinumpy.dev/post/bound-version-constraints/

Here we're still fighting for Python 3.13 since January when 3.14 will be released in 5 weeks... I hope Aider will be ready by then.

it's funny how a cli program that embraces a new technology (LLM) is so blatantly out of date and stuck in the past. I hope this fork will support python 3.14 but it should and if there are problems here and there pretty sure they are easy to overcome.

Kreijstal avatar Aug 30 '25 16:08 Kreijstal

it's funny how a cli program that embraces a new technology (LLM) is so blatantly out of date and stuck in the past. I hope this fork will support python 3.14 but it should and if there are problems here and there pretty sure they are easy to overcome.

Aye — I mean, we all know LLMs are programmed in 1959's LISP, right? LISP, after all, is the language of Artificial Intelligence — not ugly Python. 😏

GwynethLlewelyn avatar Aug 31 '25 17:08 GwynethLlewelyn

Vibe coder here (who does understand most of the generated code), but not a big python expert. Unless I am missing something gravely, on Ubuntu users now need to install pip and modules in a virtual-env, i.e. using the pip install aider-installer method although the curl based method to run installation script directly based on using uv and dedicated Python 3.12 for aider, works... just that on resource constrained dev systems (like say a Mac M1 air with 256GB SSD) the extra storage space can be a bit of a worry (although not a huge worry).

bdutta avatar Sep 16 '25 09:09 bdutta