On 20 October 2017 at 07:33, Donald Stufft <donald@stufft.io> wrote:

On Oct 19, 2017, at 5:26 PM, Tres Seaver <tseaver@palladion.com> wrote:

Having the packaging
system register those services at installation time (even if it doesn't
care otherwise about them) seems pretty reasonable to me.

It does register them at installation time, using an entirely generic feature of “you can add any file you want to a dist-info directory and we will preserve it”. It doesn’t need to know anything else about them other then it’s a file that needs preserved.

That's all the *installer* needs to know. Publishing tools like flit need to know the internal format in order to replicate the effect of https://packaging.python.org/tutorials/distributing-packages/#console-scripts and to interoperate with any other pkg_resources based plugin ecosystem.

I personally find it useful to think of entry points as a pub/sub communications channel between package authors and other runtime components.

When you use the entry points syntax to declare a pytest plugin as a publisher, your intended subscriber is pytest, and pytest defines the possible messages. Ditto for any other entry points based plugin management system.

Installers are mostly just a relay link in that pub/sub channel - they take the entry point announcement messages in the sdist or wheel archive, and pass them along to the installation database.

The one exception to the "installers as passive relay" behaviour is that when you specify "console_scripts", your intended subscribers *are* package installation tools, and your message is "I'd like an executable wrapper for these entry points, please".

Right now, the only documented publishing API for that pub/sub channel is setuptools.setup(), and the only documented subscription API is pkg_resources. Documenting the file format explicitly changes that dynamic, such that any publisher that produces a compliant `entry_points.txt` file will be supported by pkg_resources, and any consumer that can read a compliant `entry_points.txt` file will be supported by setuptools.setup()

Cheers,
Nick.

--
Nick Coghlan   |   ncoghlan@gmail.com   |   Brisbane, Australia