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

11
4
sky2224 3 days ago

I definitely appreciate seeing people take initiative within the open source community to keep maintenance alive for packages that are used by thousands of projects. Was any effort made to contact the original author ever? Seems very odd to see them drop off the face of the Earth like that with such a popular project.

zahlman 3 days ago

Ah, I guess I should have described that in more detail.

The author habitually never commented on the issue tracker, despite continuing to merge pull requests until 2023. An explicit query (https://github.com/okunishinishi/python-stringcase/issues/42) went unanswered, too. Someone highlighted the author's email address on https://github.com/okunishinishi/python-stringcase/issues/43 a few days ago and nothing seems to have come of it.

This is arguably not the strongest possible evidence - and that's why they're so careful about PEP 541. And in all honesty, this is not someone who's "disappeared off the face of the earth" - just someone who doesn't appear to be reachable WRT this project. But I'm not convinced the author ever realized the project's popularity in the first place. It also looks like said author mostly uses Javascript, anyway (https://github.com/okunishinishi?tab=repositories). I imagine the expectations are different in the NPM ecosystem.

gtirloni 3 days ago

General question: how do you find and choose abandonware?