Tell HN: I forked and republished a popular, abandoned Python library
The `stringcase` package on PyPI [0] is fairly popular, on the order of 150k daily downloads [1]. However, there has been no sign of activity since June of 2023, and that was only to merge a pull request that breaks tests. The author's own last changes appear to have been a few days after the last PyPI release, in August 2017. A wheel was never distributed, despite being a single-file Python implementation with no dependencies. (If you think that shouldn't require a build step, please read [2].)

And then, like many other "legacy" projects [3] not using a `pyproject.toml` file or distributing a wheel, it failed to build under Setuptools 78.0.1 , therefore also blocking the installation of all its dependents.

As a future-proofing measure, I've re-released the project as `stringcase-new` [4][5]. (As "defense in depth", I've also migrated the project's packaging to Flit ;) ) The import name for Python code is untouched; if you're affected, you need only add `-new` to `stringcase` in your dependency specifications. Versioning is also intended to maintain continuity. The 1.2.2 release should behave identically to 1.2.0, just in case you need a bug-compatible version with modern packaging; 1.2.3 will incorporate the author's apparent planned fixes for 1.2.1, as well as bugfixes from the community where appropriate.

I'm trying to be quite conservative with this. If you want fixes and additional functionality, and don't mind a different import name, you may prefer to switch to Casefy [6], which has become popular in its own right [7].

The process [8] for recovering names on PyPI for abandoned projects can take a very long time, but I've been encouraged to follow up on that. If I ever do get the `stringcase` name on PyPI I will rebuild the releases (to fix metadata) and make them available under the original name as well.

If you know anyone with a project depending on `stringcase`, including transitively, please let them know. One major dependent is `frictionless` [9], who apparently have decided to vendor `stringcase` [10]. (Keep in mind you are not future-proofed if you pin or cap the `frictionless` version.)

I'd also like to specifically thank Damian Shaw [11] of the Pip maintenance team for extraordinary efforts (e.g. [12]) in coordinating discussion (and contributions to existing discussion) around the underlying problems that allowed removal of a trivial, years-deprecated feature from Setuptools to be so disruptive. This isn't just about Setuptools' policies and abandoned projects: other build backends can learn from this, build frontends (including installers) can offer better overrides for build backend versions used in build isolation, and both sides can coordinate to make deprecation warnings more visible to developers.

And hopefully, maybe, one day Setuptools will become just a build backend, like it seemingly wants to be [13].

[0]: https://pypi.org/project/stringcase

[1]: https://pypistats.org/packages/stringcase

[2]: https://pradyunsg.me/blog/2022/12/31/wheels-are-faster-pure-python

[3]: https://github.com/pypa/setuptools/issues/4910

[4]: https://github.com/zahlman/stringcase-new

[5]: https://pypi.org/project/stringcase-new

[6]: https://github.com/dmlls/python-casefy

[7]: https://pypistats.org/packages/casefy

[8]: https://peps.python.org/pep-0541/#how-to-request-a-name-transfer

[9]: https://github.com/frictionlessdata/frictionless-py

[10]: https://github.com/frictionlessdata/frictionless-py/pull/1727

[11]: https://github.com/notatallshaw

[12]: https://discuss.python.org/t/_/85847

[13]: https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html