Q:

Sharing a python script with module requirements? 

I'm new to python and was curious if python had something like an npm install that would pip install the required packages for a script I have.   I've looked into the setup.py readme and it looks like its mostly geared to creating a tarball to send to pip, which isn't what I want. 
I'd like to be able to check out the source code and then just run it.   As it stands when I ask my coworkers to use the script they run into import failures and have to manually pip install things which is a poor experience. 
My setup.py file is
#! /usr/bin/env python

from distutils.core import setup

setup(name='Add-Webhook',
      version='1.0',
      description='Adds webhooks to git repos',
      author='devshorts',
      packages=['requests'],
     )

And when I run it it
$ python setup.py install
running install
running build
running build_py
error: package directory 'requests' does not exist

I have a small script that sits next to the setup.py that uses the requests package and I'd like for it to be installed on 'install'
$ ls
total 40
-rw-r--r--  1 akropp  JOMAX\Domain Users  1039 Feb 24 09:51 README.md
-rwxr-xr-x  1 akropp  JOMAX\Domain Users  4489 Feb 27 17:01 add-webhook.py
-rw-r--r--  1 akropp  JOMAX\Domain Users   391 Feb 23 14:24 github.iml
-rw-r--r--  1 akropp  JOMAX\Domain Users   213 Apr  8 15:06 setup.py

A:

Create requirements.txt file in your project's root directory, and add necessary Python packages with the versions you need. 
Then just run $pip install -r requirements.txt to install everything that you have specified in requirements.txt file. 
Not sure if this is what you need, but this is something better than running $pip install <package name> for several times. 

A:

You have misunderstood the parameters for setup.  The packages parameter is for specifying the packages that you are providing, not the dependencies of those packages. 
Per the documentation:

Dependencies on other Python modules and packages can be specified by supplying the requires keyword argument to setup().  The value must be a list of strings.  Each string specifies a package that is required, and optionally what versions are sufficient. 

You could also consider using setuptools instead of distutils (switch to from setuptools import setup) and specifying install_requires (see the docs on dependency declarations) - see e.g. Differences between distribute, distutils, setuptools and distutils2?