MagicStack / MagicStack/asyncpg
setup.py relies on deprecated pkg_resources
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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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