If you don't want to depend then you can do the traditional
try:
import sniffio
except ImportError:
have_sniffio = False
else:
have_sniffio = True
dance.
For trio I was lazy and just made it a dependency because the sniffio wheel is a whopping 4 kilobytes. But there's no problem with doing that if you want.
Did you also think about whether it would be possible for a library to
advertise itself without having to depend on a third-party library
(e.g. using some sort of convention)? That would permit a less
"centralized" approach.
What kind of convention do you have in mind?
The problem with a convention AFAICT is that you need some shared agreement about where to rendezvous. That's basically all the sniffio library is: a shared, neutral place for libraries to advertise themselves. (Plus a fallback for detecting asyncio, because stdlib libraries have special constraints.)
-n