Yeah pip
is a little special as it can kinda do both. In the typical sense though, where pypi has wheels, I’d call pip a puller. I’d say its primary purpose is to parse the setup.py/requirements.txt and manage dependencies, which puts it pretty solidly into the puller camp, even though accomplishing that goal might involve building wheels.