Acceptable packages for PyPI?

I think most people probably have a strong association between pip/PyPI and Python packages, but I know of at least a few non-python packages on PyPI.

Is there an official/unofficial stance on non-Python packages being uploaded to PyPI? If some categories would be encouraged/discouraged, is there a guideline such as non-Python packages that would be useful as part of a build-system.requires entry used to build Python packages containing native extensions?

Some examples of packages on PyPI that come to mind that are non-Python packages include (which seem to be mostly build system related):

ninja, at least, is a Python package in a sense: it contains enough wrapper that a script can do import ninja, and under the covers there’s a binary bit that’s the compiled program. Call it a “binding” if you like, I think there are quite a few packages in that general category. And since you call out build systems, the SCons system (which is pure Python) has the ability to use ninja, so it’s quite happy the ninja package exists :slight_smile:

I was suprised about cmake on pypi. I got it from their standard installer for years, then stumbled upon someone claiming “pip install cmake” was how they did it, and lo it worked! One more thing into requirements.txt and one less thing to special case, so for me it’s a win.

cmake and ninja are very common dependencies for libraries which include C/C++ code. Publishing those with these packages as build dependencies reduces the effects on the end user, since they would otherwise need to install them prior to the package.

The “official stance” (if there’s one) is anything that can be built as a wheel belongs on PyPI. In practice this means basically anything belongs with a simplistic wrapper, because wheel containing little or no Python code is a totally valid thing, and very useful in a lot of scenarios (as already mentioned).

ziglang is also a significant example of this—it not only is a builld system, but contains an entire compiler (of Zig, and by extension C).