MagicStack / MagicStack/asyncpg

setup.py relies on deprecated pkg_resources

Open
#1,337 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
8.1k
Forks
468
PR merge metrics
No merged PRs in 30d

Description

### Summary

`setup.py` imports and uses the deprecated `pkg_resources` module (from `setuptools`) to validate the installed Cython version when building asyncpg from source:

- https://github.com/MagicStack/asyncpg/blob/db8ecc2/setup.py#L191
- https://github.com/MagicStack/asyncpg/blob/db8ecc2/setup.py#L204-L205

```python
import pkg_resources
...
cython_dep = pkg_resources.Requirement.parse(CYTHON_DEPENDENCY)
if Cython.__version__ not in cython_dep:
...
```

### Problem

`pkg_resources` has [long been deprecated](https://setuptools.pypa.io/en/latest/deprecated/pkg_resources.html) by setuptools: importing it emits `DeprecationWarning: pkg_resources is deprecated as an API`, and it is slated for removal. On recent setuptools/distro configurations it may no longer be importable at all, which can make source builds of asyncpg warn or fail.

### Existing work / options

- **Drop the check:** open PR #1314 already proposes removing the Cython version check from `setup.py` entirely to eliminate the `pkg_resources` dependency.
- **Port to `packaging`:** alternatively the check can be preserved by switching to the `packaging` library, as the sister project uvloop did in MagicStack/uvloop@b377b7c6885a1eb63cb8cf19db5ab66a12c79e21 — replacing `pkg_resources.Requirement.parse(...)` with `packaging.requirements.Requirement(...)` and `x not in dep` with `dep.specifier.contains(x, prereleases=True)` (adding `packaging` to `build-system.requires`). `pkg_resources.Requirement.__contains__` used `prereleases=True` internally, so passing `prereleases=True` preserves the original behavior exactly.

Either approach removes the deprecated dependency. Filing this to track the deprecation as an issue alongside the in-flight PR #1314.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading setup.py around lines 191 and 204-205, then compare the existing PR #1314 with the packaging approach used by uvloop. Done means the source-build path no longer imports deprecated pkg_resources while preserving the intended Cython dependency behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
build-system
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
28/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.